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

时间:2017-06-05 18:02:53

标签: python list

我有两个清单列表。

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

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

以下是两个列表的代码(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

非常感谢!谢谢。

2 个答案:

答案 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)

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