Say I have these three lists:
aList = [1,2,3,4,5,6]
bList = ['a','b','c','d']
cList = [1,2]
and I want to iterate over them using zip
.
By using cycle with zip
as following:
from itertools import cycle
for a,b,c in zip(aList, cycle(bList), cycle(cList)):
print a,b,c
I get the result as:
1 a 1
2 b 2
3 c 1
4 d 2
5 a 1
6 b 2
Though I want my result to be like:
1 a 1
2 b 1
3 c 1
4 d 1
5 a 2
6 b 2
You can use itertools.repeat()
to repeat the items of third list based on second list:
>>> 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)]
You can apply itertools.product
on c
and b
and then restore their original order in the print
statement:
>>> 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With