Python 将列表中的项映射到列表列表

Python 将列表中的项映射到列表列表,python,for-loop,iteration,Python,For Loop,Iteration,我正在考虑一种有效的方法,将列表中的名称映射到列表中的分组索引项 假设我有这个分组: g = [[0,1],[2]] 我还有以下清单: names = ["canine", "dog", "feline"] 我想根据索引将映射名称返回到分组: result = [["canine","dog"], ["feline"]] 我不太清楚如何做到这一点,甚至不知道如何有效地做到这一点。这是我到目前为止得到的,但它不起作用 final = [] for j in range(len(names))

我正在考虑一种有效的方法,将列表中的名称映射到列表中的分组索引项

假设我有这个分组:

g = [[0,1],[2]]
我还有以下清单:

names = ["canine", "dog", "feline"]
我想根据索引将映射名称返回到分组:

result = [["canine","dog"], ["feline"]]
我不太清楚如何做到这一点,甚至不知道如何有效地做到这一点。这是我到目前为止得到的,但它不起作用

final = []
for j in range(len(names)):
    for item in g:
        for inner in item:
            res = []
            if inner == j:
                res.append(names[inner])
        final.append(res)
print(final)

任何提示都将不胜感激。

我认为您可能希望循环使用g而不是名称。并没有理由对名称进行循环,因为您将使用值g对其进行索引。在这种情况下,简单的列表理解可能更适合:

[[names[i] for i in sublist] for sublist in g]

我想你可能想循环g而不是名字。并没有理由对名称进行循环,因为您将使用值g对其进行索引。在这种情况下,简单的列表理解可能更适合:

[[names[i] for i in sublist] for sublist in g]
您还可以将map与lambda一起使用,以实现最终输出:

g = [[0, 1], [2]]

names = ["canine", "dog", "feline"]

result = [map(lambda i: names[i], sub_list) for sub_list in g]
# Output: [['canine', 'dog'], ['feline']]
您还可以将map与lambda一起使用,以实现最终输出:

g = [[0, 1], [2]]

names = ["canine", "dog", "feline"]

result = [map(lambda i: names[i], sub_list) for sub_list in g]
# Output: [['canine', 'dog'], ['feline']]

如果要对连续元素进行切片,则使用g=[2,1]表示子列表的长度更为合理。如果要对连续元素进行切片,则使用g=[2,1]表示子列表的长度更为合理。