什麼是Pythonic方法來實現以下目標?如何將列表合併到元組列表中?
# Original lists:
list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]
# List of tuples from 'list_a' and 'list_b':
list_c = [(1,5), (2,6), (3,7), (4,8)]
的list_c
每個成員是一個元組,其第一構件是從list_a
,第二個是從list_b
。
什麼是Pythonic方法來實現以下目標?如何將列表合併到元組列表中?
# Original lists:
list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]
# List of tuples from 'list_a' and 'list_b':
list_c = [(1,5), (2,6), (3,7), (4,8)]
的list_c
每個成員是一個元組,其第一構件是從list_a
,第二個是從list_b
。
>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> zip(list_a, list_b)
[(1, 5), (2, 6), (3, 7), (4, 8)]
您是否在尋找內建函數zip。
在python 3.0 zip中返回一個zip對象。您可以致電list(zip(a, b))
以獲取清單。
我知道這是一個老問題,已經回答了,但由於某種原因,我仍然想發佈這個替代解決方案。我知道很容易找到哪個內置函數可以做到你需要的「魔法」,但是知道自己可以做到這一點並沒有什麼壞處。
>>> list_1 = ['Ace', 'King']
>>> list_2 = ['Spades', 'Clubs', 'Diamonds']
>>> deck = []
>>> for i in range(max((len(list_1),len(list_2)))):
while True:
try:
card = (list_1[i],list_2[i])
except IndexError:
if len(list_1)>len(list_2):
list_2.append('')
card = (list_1[i],list_2[i])
elif len(list_1)<len(list_2):
list_1.append('')
card = (list_1[i], list_2[i])
continue
deck.append(card)
break
>>>
>>> #and the result should be:
>>> print deck
>>> [('Ace', 'Spades'), ('King', 'Clubs'), ('', 'Diamonds')]
更改其中一個輸入列表(如果它們的長度不同)並不是一個好的副作用。另外,在'if-elif'中兩個'card'的分配是不需要的,這就是爲什麼你有'continue'。 (事實上,如果沒有「繼續」,你不需要改變列表:之前提到的任務都應該保留下來,成爲'card =(list_1 [i],'')'和'card =('', list_2 [1])')。 – 2017-01-07 15:01:13
您可以使用地圖拉姆達
a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)
這也將工作,如果有原始列表的長度不匹配
爲什麼使用lambda? 'map(None,a,b)' – 2016-06-08 00:19:14
沒有人會拋出一個錯誤,因爲它不可調用。 – 2016-07-10 14:55:19
你試過了嗎? – 2016-07-10 15:54:44
您的問題聲明顯示輸出不是元組,但名單
list_c = [(1,5), (2,6), (3,7), (4,8)]
支票
type(list_c)
考慮你想要的結果作爲元組進行list_a和list_b的,做
tuple(zip(list_a,list_b))
從我的角度來看,它似乎是我正在尋找和正確工作(列表和元組)。因爲當你使用** print **時,你會看到正確的值(正如預期的一樣,由@cyborg和@Lodewijk提及)並且與**對象**沒有任何關係,例如:'<0x000001F266DCE5C0的映射對象>或'<0x000002629D204C88>的zip對象''。至少,關於** map **和** zip **(單獨)的解決方案對我來說似乎不完整(或太複雜)。 – 2017-05-28 01:40:34
你必須知道的是,拉鍊功能在最短列表的末尾,這可能不總是你想要停止。 'itertools'模塊定義了一個'zip_longest()'方法,該方法在最長列表的末尾停止,用你提供的參數填充缺失的值。 – 2010-03-09 10:05:48
@Adrien:歡呼您的適用評論。對於Python 2.x,s/zip_longest()/ izip_longest()'。在Python 3.x中重命名爲'zip_longest()'。 – bernie 2011-07-10 19:13:44
可以使用zip命令創建[(1,5),(1,6),(1,7),(1,8),(2,5),(2,6)等等]嗎? – 2016-05-30 04:39:57