根据不同列表的索引获取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
帮助非常感谢!谢谢。
有一种更简单的方法来完成你的函数正在做的事情,但为了回答你的问题,你只需要两个循环(每个级别的列表一个循环):第一个列表遍历列表列表,第二个迭代在内部列表和做有点奇怪的y
或n
东西来选择一个值。
“有一个更简单的方法来做你的功能在做”谢谢。我在这里学习,如果你能提出什么方法会很棒。谢谢。 – 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]
如果您想列表的列表,你可以移动的嵌套纳入父母理解的新列表。
谢谢 - 我正在测试您的解决方案并报告回来。 (我迷失在我的逻辑中,试图使用.zip) – alc
如果这是针对python2的,那么对于大量的数据将会变得很难处理。 –
你为什么不使用'zip'? –
另外,仅供参考:'NNN = NN'不会做** NN的副本。 –
谢谢你的评论 - 但如果我使用deepcopy改变我的结果,所以我用newlist = oldlist – alc