Python-如何根据另一个列表的值创建一个新列表?

时间:2020-06-25 17:14:36

标签: python

新手问题: 我有2个列表:

# The first one is a list of lists:
list_a = [[1,5,3],[4,2],[2,3,3,5],[2,3,1]]
# The second one is a list of strings:
list_b = ['a','b','c','d','e']

问题是: 我如何创建一个新的列表list_c,看起来像这样?

list_c = [['a','e','c'], ['d','b'], ['b','c','c','e'],['b','c','a']]

所以基本上,我需要做的是映射出代表list_b索引的list_a的值。

我尝试做嵌套循环,但是我真的很困惑。

5 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:-

list_c = [[list_b[i-1] for i in j] for j in list_a]
print(list_c)

输出:-

[['a', 'e', 'c'], ['d', 'b'], ['b', 'c', 'c', 'e'], ['b', 'c', 'a']]

答案 1 :(得分:0)

如果您不担心索引错误,则可以使用nested list comprehension简洁地表达出来:

/

答案 2 :(得分:0)

您在这里:

list_c = [
    [list_b[item - 1] for item in inner_list] for inner_list in list_a
]
print(list_c)

输出:

[['a', 'e', 'c'], ['d', 'b'], ['b', 'c', 'c', 'e'], ['b', 'c', 'a']]

答案 3 :(得分:0)

您需要执行以下操作:

for index, item in enumerate(list_a):
 for list_index, list_item in enumerate(list_a[index]):
    list_a[index][list_index] = None
    list_a[index][list_index] = list_b[list_item]

print(list_a)

输出:

[['b', 'f', 'd'], ['e', 'c'], ['c', 'd', 'd', 'f'], ['c', 'd', 'b']]

答案 4 :(得分:0)

有一个用于该模块的模块:operator。您可以使用operator.itemgetter()

from operator import itemgetter as ig

list_a = [[1,5,3],[4,2],[2,3,3,5],[2,3,1]]
list_b = ['a','b','c','d','e']
list_c = [ig(*[i-1 for i in l])(list_b) for l in list_a]

print(list_c)

输出:

[('a', 'e', 'c'), ('d', 'b'), ('b', 'c', 'c', 'e'), ('b', 'c', 'a')]

它会生成一个元组列表,可以通过将list()添加到ig(*[i-1 for i in l])(list_b)来进行调整。

如果list_a中的索引没有移动一个单位,这当然会更整洁:

from operator import itemgetter as ig

list_a = [[0,4,2],[3,1],[1,2,2,4],[1,2,0]]
list_b = ['a','b','c','d','e']
list_c = [ig(*l)(list_b) for l in list_a]

print(list_c)

输出:

[('a', 'e', 'c'), ('d', 'b'), ('b', 'c', 'c', 'e'), ('b', 'c', 'a')]