Was ist der Pythonic-Ansatz, um Folgendes zu erreichen?
# 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)]
Jedes Mitglied von list_c
Ist ein Tupel, dessen erstes Mitglied von list_a
Und dessen zweites von list_b
Stammt.
In Python 2:
>>> 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)]
In Python 3:
>>> 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)]
In python 3.0 Zip wird ein Zip-Objekt zurückgegeben. Sie können eine Liste daraus abrufen, indem Sie list(Zip(a, b))
aufrufen.
Sie können Karte Lambda verwenden
a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)
Dies funktioniert auch, wenn die Länge der Originallisten nicht übereinstimmt
Sie suchen nach der eingebauten Funktion Zip .
Ich bin mir nicht sicher, ob dies eine pythonische Methode ist oder nicht, aber dies scheint einfach zu sein, wenn beide Listen die gleiche Anzahl von Elementen haben:
list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]
list_c=[(list_a[i],list_b[i]) for i in range(0,len(list_a))]
Ich weiß, dass dies eine alte Frage ist und bereits beantwortet wurde, aber aus irgendeinem Grund möchte ich immer noch diese alternative Lösung posten. Ich weiß, dass es einfach ist, herauszufinden, welche integrierte Funktion die "Magie" bewirkt, die Sie benötigen, aber es tut nicht weh, zu wissen, dass Sie es selbst tun können.
>>> 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')]
Die Ausgabe, die Sie in der Problembeschreibung angezeigt haben, ist nicht das Tupel, sondern die Liste
list_c = [(1,5), (2,6), (3,7), (4,8)]
überprüfe auf
type(list_c)
wenn Sie das Ergebnis als Tupel aus list_a und list_b erhalten möchten, tun Sie dies
Tuple(Zip(list_a,list_b))
Eine Alternative ohne Zip
:
list_c = [(p1, p2) for idx1, p1 in enumerate(list_a) for idx2, p2 in enumerate(list_b) if idx1==idx2]
Falls man nicht nur Tupel 1 mit 1, 2 mit 2 ... sondern alle möglichen Kombinationen der 2 Listen erhalten möchte, wäre das mit erledigt
list_d = [(p1, p2) for p1 in list_a for p2 in list_b]