l1 = [4, 6, 8]
l2 = [a, b, c]
result = [(4,a),(6,b),(8,c)]
我该怎么做?
答案 0 :(得分:12)
zip
标准功能为您完成此任务:
>>> l1 = [4, 6, 8]
>>> l2 = ["a", "b", "c"]
>>> zip(l1, l2)
[(4, 'a'), (6, 'b'), (8, 'c')]
如果您使用的是Python 3.x,那么zip
会返回一个生成器,您可以使用list()
构造函数将其转换为列表:
>>> list(zip(l1, l2))
[(4, 'a'), (6, 'b'), (8, 'c')]
答案 1 :(得分:11)
使用zip
。
l1 = [1, 2, 3]
l2 = [4, 5, 6]
>>> zip(l1, l2)
[(1, 4), (2, 5), (3, 6)]
请注意,如果您的列表长度不同,结果将被截断为最短输入的长度。
>>> print zip([1, 2, 3],[4, 5, 6, 7])
[(1, 4), (2, 5), (3, 6)]
您还可以使用包含两个以上列表的zip:
>>> zip([1, 2, 3], [4, 5, 6], [7, 8, 9])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
如果您有列表列表,可以使用星号呼叫zip
:
>>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> zip(*l)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
答案 2 :(得分:1)
>>> l1 = [4, 6, 8]; l2 = ['a', 'b', 'c']
>>> zip(l1, l2)
[(4, 'a'), (6, 'b'), (8, 'c')]
答案 3 :(得分:0)
如果列表的长度相同,或者您希望列表的长度是较短列表的长度,那么请使用zip,就像其他人指出的那样。
如果列表的长度不同,那么您可以使用转化函数为map
的{{1}}:
None
请注意,“额外”值会与>>> l1 = [1, 2, 3, 4, 5]
>>> l2 = [9, 8, 7]
>>> map(None, l1, l2)
[(1, 9), (2, 8), (3, 7), (4, None), (5, None)]
配对。
同样值得注意的是,None
和zip
都可以与任意数量的迭代一起使用:
map