Jakie jest podejście Python do osiągnięcia następujących celów?
# 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)]
Każdy członek list_c
jest krotką, której pierwszy członek jest z, list_a
a drugi jest z list_b
.
itertools
moduł definiujezip_longest()
metodę, która zatrzymuje się na końcu najdłuższej listy, wypełnianie brakujących wartości, z czymś, co zapewni jako parametr.s/zip_longest()/izip_longest()
. Zmieniono nazwę w Python 3.x nazip_longest()
.itertools.product()
robi to.W Pythonie 3.0 zip zwraca obiekt zip. Możesz uzyskać listę, dzwoniąc
list(zip(a, b))
.źródło
Możesz użyć mapy lambda
Będzie to również działać, jeśli długości oryginalnych list się nie zgadzają
źródło
map(None, a,b)
Szukasz wbudowanej funkcji zip .
źródło
Nie jestem pewien, czy jest to pythonowy sposób, czy nie, ale wydaje się to proste, jeśli obie listy mają tę samą liczbę elementów:
źródło
Wiem, że to stare pytanie, na które już udzielono odpowiedzi, ale z jakiegoś powodu nadal chcę opublikować to alternatywne rozwiązanie. Wiem, że łatwo jest po prostu dowiedzieć się, która wbudowana funkcja wykonuje „magię”, której potrzebujesz, ale nie szkodzi, że możesz to zrobić samodzielnie.
źródło
card
wif-elif
nie są potrzebne, dlatego maszcontinue
. (W rzeczywistości, bezcontinue
nie musiałby zmienić wykazy: oba wcześniej wymienione zadania powinny być utrzymane, a następnie staćcard = (list_1[i], '')
icard = ('', list_2[1])
odpowiednio.)Dane wyjściowe pokazane w opisie problemu nie są krotką, lecz listą
Sprawdź
biorąc pod uwagę, że chcesz wynik jako krotkę z list_a i list_b, zrób
źródło
<map object at 0x000001F266DCE5C0>
lub<zip object at 0x000002629D204C88>
. Przynajmniej rozwiązanie dotyczące mapy i zip (sam) wydaje mi się niekompletne (lub zbyt skomplikowane) dla mnie.Jedna alternatywa bez użycia
zip
:W przypadku, gdy chce się uzyskać nie tylko krotki 1. z 1., 2. z 2.… ale wszystkie możliwe kombinacje 2 list, to można zrobić z
źródło