簡體   English   中英

如何在Python中以元素方式連接列表?

[英]How to join lists element-wise in Python?

l1 = [4, 6, 8]
l2 = [a, b, c]

結果= [(4,a),(6,b),(8,c)]

我怎么做?

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')]

使用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)]
>>> l1 = [4, 6, 8]; l2 = ['a', 'b', 'c']
>>> zip(l1, l2)
[(4, 'a'), (6, 'b'), (8, 'c')]

如果列表的長度相同,或者您希望列表的長度是較短列表的長度,那么請使用zip,就像其他人指出的那樣。

如果列表的長度不同,則可以使用帶None變換函數的map

>>> l1 = [1, 2, 3, 4, 5]
>>> l2 = [9, 8, 7]
>>> map(None, l1, l2)
[(1, 9), (2, 8), (3, 7), (4, None), (5, None)]

請注意,'extra'值與None配對。

值得注意的是, zipmap都可以與任意數量的iterables一起使用:

>>> zip('abc', 'def', 'ghi')
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
>>> map(None, 'abc', 'def', 'gh')
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', None)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM