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

根据不同列表的索引获取python子列表的元素,python,list,Python,List,我有两张名单 我想根据第一个列表中的值,从第二个列表中获取元素 如果我有简单的列表,一切都会顺利进行,但一旦我有了列表列表,我就会在最后遗漏一些东西 下面是用于两个列表(N=名称,V=值)的代码: 如果我定义了一个函数,它可以很好地应用于两个列表: def GV(N,V,name): bool_ls = [] NN = N for i in NN: if i == name: i = 'y' else:

我有两张名单

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

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

下面是用于两个列表(N=名称,V=值)的代码:

如果我定义了一个函数,它可以很好地应用于两个列表:

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
操作来选择值。

有一种更简单的方法来执行函数正在执行的操作,但是,为了回答您的问题,您只需要两个循环(每个级别的列表对应一个循环):第一个列表遍历列表列表,第二个循环遍历内部列表,并执行有点奇怪的
y
n
操作来选择值。

您可以使用从两个列表生成成对组合,然后在列表中进行筛选

对于简单列表:

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]

如果需要列表列表,可以将嵌套移动到父理解中的新列表中。

可以使用从两个列表生成成对组合,然后在列表理解中进行筛选

对于简单列表:

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
?另外,仅供参考:
NNN=NN
不会复制
NN
。谢谢您的评论-但是如果我使用deepcopy会改变我的结果,所以我使用了newlist=oldlist为什么你不使用
zip
?另外,仅供参考:
NNN=NN
不会复制
NN
。谢谢你的评论-但是如果我使用deepcopy会改变我的结果,所以我使用了newlist=oldlist谢谢你-我正在测试你的解决方案并向你汇报。(我在尝试使用.zip时迷失了我的逻辑)如果这是针对python2的,那么对于大量数据来说,它将变得很难处理。谢谢-我正在测试您的解决方案并向您报告。(我在尝试使用.zip时迷失了我的逻辑)如果这是针对python2的,那么对于大量数据来说,它将变得很难处理。“有一种更简单的方法来完成您的函数正在做的事情”谢谢。我在这里学习,如果你能建议什么方法将是伟大的。谢谢。“有一种更简单的方法来完成你的功能。”谢谢。我在这里学习,如果你能建议什么方法将是伟大的。谢谢