我想创建一个包含多个列表的列表,特别是考虑一个列表。
例如:我想将a
,b
,c
中的项目添加到x
列表中,然后将x
添加到一个主列表中。
mainlist = []
x = [1, 2, 3] # items will be added hear.
a = ['a1', 'b1', 'c1']
b = ['a2', 'b2', 'c2']
c = ['a3', 'b3', 'c3']
首先,我需要为x
创建一个列表列表:
x = [[i] for i in x]
它返回:
out[1]: [[1], [2], [3]]
现在,我想在这些列表中添加项目:
for item in range(0, len(x)):
x[item].insert(1, a[item])
out[2]: [[1, 'a1'], [2, 'b1'], [3, 'c1']]
然后附加到mainlist
:
mainlist.append(x)
out[3]: [[[1, 'a1'], [2, 'b1'], [3, 'c1']]]
我的问题是如何像b
列表一样添加c
和a
中的项目,以获得此输出:
[[[1, 'a1'], [2, 'b1'], [3, 'c1']], [1, 'a2'], [2, 'b2'], [3, 'c2']], [1, 'a3'], [2, 'b3'], [3, 'c3']]]
我尝试了这个,我得到了结果,但我认为这个代码可以改进。
item1 = [[i] for i in x]
item2 = [[i] for i in x]
item3 = [[i] for i in x]
for i in range(0, len(item1)):
item1[i].insert(1, a[i])
for i in range(0, len(item2)):
item2[i].insert(1, b[i])
for i in range(0, len(item3)):
item3[i].insert(1, c[i])
mainlist.append(item1)
mainlist.append(item2)
mainlist.append(item3)
任何改善它的建议都是适用的。谢谢!
答案 0 :(得分:3)
zip x ,每个列表 a,b,c 使用 list comp :< / p>
x = [1, 2, 3] # items will be added hear.
a = ['a1', 'b1', 'c1']
b = ['a2', 'b2', 'c2']
c = ['a3', 'b3', 'c3']
main_list = [zip(x, y) for y in a,b,c]
那会给你:
[[(1, 'a1'), (2, 'b1'), (3, 'c1')], [(1, 'a2'), (2, 'b2'), (3, 'c2')], [(1, 'a3'), (2, 'b3'), (3, 'c3')]]
如果您真的想要子列表而不是元组,可以调用 map 将元组映射到列表:
[list(map(list, zip(x, y))) for y in a,b,c]
如果您打算使用没有 zip 逻辑的常规循环,您可以执行以下操作:
l = []
for y in a, b, c:
l.append([[x[i], ele] for i, ele in enumerate(y)])
print(l)
或者相同的list comp版本:
[[[x[i], ele] for i, ele in enumerate(y) ] for y in a, b, c]
假设所有内容都与x
的长度相同,每个i
都是y
中当前元素的索引,我们将其与来自x
的相应元素进行匹配这正是拉链正在做的事情。