web-dev-qa-db-fra.com

Comment créer Tuple avec une boucle en python

Je veux créer ce tuple:

a=(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9)

J'ai essayé avec ça

a=1,1,1
for i in range (2,10):
    a=a,(i,i,i)

Cependant, il crée un tuple dans un autre tuple à chaque itération.

Je vous remercie

5
HolyCrack

Utilisez une virgule supplémentaire dans vos n-uplets et rejoignez simplement:

a = ((1,1,1),)
for i in range(2,10):
    a = a + ((i,i,i),)

Edit : Adaptation du commentaire de juanpa.arrivillaga, si vous voulez rester en boucle, voici la bonne solution

a = [(1,1,1)]
for i in range (2,10):
    a.append((i,i,i))
a = Tuple(a)   
4
FatihAkici

Vous pouvez le déclarer sans avoir à utiliser une boucle.

a = Tuple((i,)*3 for i in range(1, 10))
6
Olivier Melançon

itertools.repeat peut également être utilisé ici: 

>>> from itertools import repeat
>>> [Tuple(repeat(i, 3)) for i in range(1, 10)]
[(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9)]

Si vous voulez que le résultat final soit un tuple de tuples plutôt qu'une liste de tuples, vous pouvez à nouveau emballer Tuple

>>> Tuple(tuple(repeat(i, 3)) for i in range(1, 10))
((1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9))
4
RoadRunner