繁体   English   中英

Python:列表理解以访问多个列表

[英]Python: List Comprehension to access multiple lists

list1 = []
list.append([item1[i], item2[i], item3[i] for i in range(2)])

即如何通过列表理解用[[item1[0], item2[0], item3[0]],[item1[1], item2[1], item3[1]]]填充list1,其中item1,item2为item3不同的清单? 例:

item1 = [1,2,3,4]
item2 = [1,4,9,16]
item3 = [1,8,27,64]

# I want list1 =
[[1,1,1],
[2,4,8],
[3,9,27],
[4,16,64]]
# through list comprehension AND APPEND STATEMENT

尝试这个:

list1 = list(zip(item1, item2, item3))

这将一直工作到item1item2item3的最小长度。 如果您想使用更长的时间,请使用itertools.zip_longest而不是zip

zip示例:

item1 = [0,1]
item3 = [2,3]
item2 = [4,5,6]
list1 = list(zip(item1, item2, item3))

[(0, 4, 2), (1, 5, 3)]

示例与itertools.zip_longest

from itertools import zip_longest

item1 = [0,1]
item3 = [2,3]
item2 = [4,5,6]
list1 = list(zip_longest(item1, item2, item3))

[(0, 4, 2), (1, 5, 3), (None, 6, None)]

在您的代码中添加另一组[]

list1 = []
list1.append([[item1[i], item2[i], item3[i]] for i in range(len(item1))])

请注意,这假设item1item2item3的长度都相同

或者,要完全匹配您的预期输出,请使用以下命令:

list1 = [[item1[i], item2[i], item3[i]] for i in range(len(item1))]

示例数据和输出

item1 = [1, 2, 3]
item2 = ["A", "B", "C"]
item3 = [0.1, 0.2, 0.3]
list1 = [[item1[i], item2[i], item3[i]] for i in range(len(item1))]
print(list1)

>>> [[1, 'A', 0.1], [2, 'B', 0.2], [3, 'C', 0.3]]

使用.append() ,列表理解变为:

for i in range(len(item1)):
    list1.append([item1[i], item2[i], item3[i]])

但是,如果你想用一个列表理解和新创建的列表仍然追加到list1 ,使用+= ,而不是.append()

list1 += [[item1[i], item2[i], item3[i]] for i in range(len(item1))]

.append()将给定项添加到列表的末尾。 +=将改为分别添加每个子列表。

如果在python 2上,只做没有list zip

zip(item1, item2, item3)

演示:

item1 = [1, 2, 3]
item2 = [4,5,6]
item3 = [7,8,9]
print(zip(item1, item2, item3))

输出:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM