2016-08-04 1 views
4

Dire que j'ai ces trois listes:cycle zip python sur la liste plusieurs

aList = [1,2,3,4,5,6] 
bList = ['a','b','c','d'] 
cList = [1,2] 

et je veux itérer sur eux en utilisant zip.

En utilisant le cycle avec zip comme suit:

from itertools import cycle 
for a,b,c zip(aList, cycle(bList), cycle(cList)): 
    print a,b,c 

-je obtenir le résultat que:

1 a 1 
2 b 2 
3 c 1 
4 d 2 
5 a 1 
6 b 2 

Bien que je veux que mon résultat soit comme:

1 a 1 
2 b 1 
3 c 1 
4 d 1 
5 a 2 
6 b 2 

Répondre

2

Vous pouvez utilisez itertools.repeat() pour répéter les éléments de la troisième liste en fonction de la deuxième liste:

>>> from itertools import repeat, chain 
>>> 
>>> zip(aList,cycle(bList), chain.from_iterable(zip(*repeat(cList, len(bList))))) 
[(1, 'a', 1), 
(2, 'b', 1), 
(3, 'c', 1), 
(4, 'd', 1), 
(5, 'a', 2), 
(6, 'b', 2)] 
+0

Salut, si mon aList = np.arange (20), cela ne fonctionnera pas . –

+0

Je veux aussi ajouter un dList = [3,4] –

+0

@AbhijayGhildyal Si vous utilisez 'numpy' vous devriez ajouter l'étiquette à votre question et/ou mentionner un exemple approprié. Je vous suggère de poser une autre question, car elle pourrait avoir une réponse complètement différente. Et vous obtiendriez un bon. – Kasramvd

2

Vous pouvez appliquer itertools.product sur c et b puis restaurer leur ordre d'origine dans la déclaration print:

>>> from itertools import product, cycle 
>>> 
>>> for a, b_c in zip(aList, cycle(product(cList, bList))): 
...  print a, b_c[1], b_c[0] 
... 
1 a 1 
2 b 1 
3 c 1 
4 d 1 
5 a 2 
6 b 2