Quelle est l'approche Pythonic pour atteindre les objectifs suivants?
# 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)]
Chaque membre de list_c
est un tuple dont le premier membre provient de list_a
et le second de list_b
.
Dans 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)]
Dans 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)]
Dans python 3.0 3.0 Zip renvoie un objet Zip. Vous pouvez en obtenir une liste en appelant list(Zip(a, b))
.
Vous pouvez utiliser la carte lambda
a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)
Cela fonctionnera également si les longueurs des listes originales ne correspondent pas
Vous recherchez la fonction intégrée Zip .
Je ne suis pas sûr que ce soit une manière pythonique ou non, mais cela semble simple si les deux listes ont le même nombre d'éléments:
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))]
Je sais que c’est une vieille question à laquelle on a déjà répondu, mais pour une raison quelconque, je veux toujours poster cette solution alternative. Je sais qu'il est facile de savoir quelle fonction intégrée fait la "magie" dont vous avez besoin, mais cela ne fait pas de mal de savoir que vous pouvez le faire vous-même.
>>> 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')]
La sortie que vous avez montrée dans l'énoncé du problème n'est pas le tuple mais la liste
list_c = [(1,5), (2,6), (3,7), (4,8)]
vérifier
type(list_c)
considérant que vous voulez que le résultat soit Tuple hors de list_a et list_b, faites
Tuple(Zip(list_a,list_b))
Une alternative sans utiliser Zip
:
list_c = [(p1, p2) for idx1, p1 in enumerate(list_a) for idx2, p2 in enumerate(list_b) if idx1==idx2]
Au cas où l’on voudrait obtenir non seulement des tuples 1er à 1er, 2ème au 2ème ... mais toutes les combinaisons possibles des 2 listes, cela se ferait avec
list_d = [(p1, p2) for p1 in list_a for p2 in list_b]