我有两个清单列表。
我希望根据第一个列表列表中的值从第二个列表列表中获取元素。
如果我有简单的列表,一切顺利,但是一旦列出了列表,我就会在最后遗漏一些东西。
以下是两个列表的代码(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
非常感谢!谢谢。
答案 0 :(得分:2)
您可以使用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]
如果您需要列表列表,可以将嵌套移动到父级解析中的新列表中。
答案 1 :(得分:0)
有一种更简单的方法来完成你的函数正在做的事情,但是,为了回答你的问题,你只需要两个循环(每个级别的列表一个循环):第一个列表遍历列表列表,第二个列表迭代内部列表,并选择一个有点奇怪的y
或n
的东西。