Yanıtlar:
Python 2'de:
>>> 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)]
Python 3'te:
>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> list(zip(list_a, list_b))
[(1, 5), (2, 6), (3, 7), (4, 8)]
s/zip_longest()/izip_longest()
,. Python 3.x olarak yeniden adlandırıldı zip_longest()
.
itertools.product()
bunu yapar.
Python 3.0 zip içinde bir zip nesnesi döndürür. Arayarak bir liste alabilirsiniz list(zip(a, b))
.
Harita lambda'yı kullanabilirsiniz
a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)
Bu, orijinal listelerin uzunluğu eşleşmediğinde de çalışır
map(None, a,b)
Bunun eski bir soru olduğunu ve zaten cevaplandığını biliyorum, ama bazı nedenlerden dolayı hala bu alternatif çözümü göndermek istiyorum. Hangi yerleşik fonksiyonun ihtiyacınız olan "büyüyü" yaptığını bulmak kolay, ama bunu kendiniz yapabileceğinizi bilmek acı vermez.
>>> 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')]
card
içinde if-elif
sen neden olduğunu, gerekli değildir continue
. (Aslında, continue
siz olmadan listeleri değiştirmek zorunda kalmazsınız: daha önce bahsedilen her iki ödev de daha sonra tutulmalı card = (list_1[i], '')
ve card = ('', list_2[1])
sırasıyla olmalıdır.)
Sorun ifadesinde gösterdiğiniz çıktı grup değil liste
list_c = [(1,5), (2,6), (3,7), (4,8)]
kontrol
type(list_c)
Sonucun list_a ve list_b dışında bir grup olmasını istediğinizi göz önünde bulundurarak,
tuple(zip(list_a,list_b))
<map object at 0x000001F266DCE5C0>
veya <zip object at 0x000002629D204C88>
. En azından, harita ve zip (tek başına) ile ilgili çözüm benim için eksik (veya çok karmaşık) görünüyor.
Kullanmadan bir alternatif zip
:
list_c = [(p1, p2) for idx1, p1 in enumerate(list_a) for idx2, p2 in enumerate(list_b) if idx1==idx2]
Biri sadece 1. ile 2., 2. ile 2. tuplleri almak istemiyorsa ... ancak 2 listenin tüm olası kombinasyonları,
list_d = [(p1, p2) for p1 in list_a for p2 in list_b]
itertools
modül tanımlarzip_longest()
parametre olarak temin şeyle eksik değerleri doldurarak, en uzun listenin sonunda durur yöntemi.