根据不同列表的索引获取python中子列表的元素

问题描述:

我有两个列表列表。根据不同列表的索引获取python中子列表的元素

我想根据列表的第一个列表中的值,从第二个列表中获取元素。

我如果我有简单的列表,一切都很顺利,但是一旦我列出了列表,我最后会遗漏一些东西。

下面是两个列表(N =名,和V =值)的工作的代码:

N = ['name 1', 'name 2','name 3','name 4','name 5','name 6','name 7','name 8','name 9','name 10'] 

V = ['val 1', 'val 2','val 3','val 4','val 5','val 6','val 7','val 8','val 9','val 10'] 

bool_ls = [] 
NN = N 
for i in NN: 
     if i == 'name 5': 
      i = 'y' 
     else: 
      i = 'n' 
     bool_ls.append(i) 

# GOOD INDEXES = GI 

GI = [i for i, x in enumerate(bool_ls) if x == 'y'] 

# SELECT THE GOOD VALUES = "GV" FROM V 

GV = [V[index] for index in GI] 

如果我定义了一个函数,效果很好施加到两个列表:

def GV(N,V,name): 
    bool_ls = [] 
    NN = N 
    for i in NN: 
     if i == name: 
      i = 'y' 
     else: 
      i = 'n' 
     bool_ls.append(i) 
    GI = [i for i, x in enumerate(bool_ls) if x == 'y'] 
    GV = [V[index] for index in GI] 

    return GV 

一旦我尝试“列表清单”,我无法得到类似的结果。我的代码看起来像下面到目前为止:

NN = [['name 1', 'name 2','name 3'], ['name 1', 'name 2','name 3'], ['name 1', 'name 2','name 3'], ['name 1', 'name 2','name 3'], ['name 1', 'name 2','name 3'], ['name 1', 'name 2','name 3']] 

VV = [['val 1', 'val 2', 'val 3'], ['val 1', 'val 2', 'val 3'], ['val 1', 'val 2', 'val 3'], ['val 1', 'val 2', 'val 3'], ['val 1', 'val 2', 'val 3']] 


def GV(NN,VV,name): 
    bool_ls = [] 
    NNN = NN 
    for j in NNN: 
     for i in j: 
      if i == name: 
       i = 'y' 
      else: 
       i = 'n' 
      bool_ls.append(i) 

# here is where I'm lost 

帮助非常感谢!谢谢。

+1

你为什么不使用'zip'? –

+0

另外,仅供参考:'NNN = NN'不会做** NN的副本。 –

+0

谢谢你的评论 - 但如果我使用deepcopy改变我的结果,所以我用newlist = oldlist – alc

有一种更简单的方法来完成你的函数正在做的事情,但为了回答你的问题,你只需要两个循环(每个级别的列表一个循环):第一个列表遍历列表列表,第二个迭代在内部列表和做有点奇怪的yn东西来选择一个值。

+0

“有一个更简单的方法来做你的功能在做”谢谢。我在这里学习,如果你能提出什么方法会很棒。谢谢。 – alc

您可以使用zip在列表理解中过滤器从这两个列表中生成成对组合。

对于平面列表:

def GV(N, V, name): 
    return [j for i, j in zip(N, V) if i==name] 

对于嵌套列表,你会添加一个额外的嵌套:

def GV(NN,VV,name): 
    return [j for tup in zip(NN, VV) for i, j in zip(*tup) if i==name] 

如果您想列表的列表,你可以移动的嵌套纳入父母理解的新列表。

+0

谢谢 - 我正在测试您的解决方案并报告回来。 (我迷失在我的逻辑中,试图使用.zip) – alc

+0

如果这是针对python2的,那么对于大量的数据将会变得很难处理。 –