新手问题: 我有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的值。
我尝试做嵌套循环,但是我真的很困惑。
答案 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')]