Essa é bem legal. Temos três listas:
>>> a=[1,2,3] >>> b=[4,5,6] >>> c=['a','b','c']
Veja:
>>> zip(a,b,c) [(1, 4, 'a'), (2, 5, 'b'), (3, 6, 'c')]
Simples e útil, não? E se as listas tiverem tamanhos diferentes?
>>> c=['a','b'] >>> zip(a,b,c) [(1, 4, 'a'), (2, 5, 'b')]
O resultado será truncado para o tamanho da menor lista. Se você quiser, pode obter um comportamento diferente com map, assim:
>>> map(None,a,b,c) [(1, 4, 'a'), (2, 5, 'b'), (3, 6, None)]
Veja um truque que eu costumava usar bastante com zip:
>>> colors=['Azul','Vermelho','Amarelo','Verde','Branco'] >>> for i in zip(range(len(colors)),colors): ... print '%i. %s' % i ... 0. Azul 1. Vermelho 2. Amarelo 3. Verde 4. Branco
Até que eu descobri enumerate():
>>> for i in enumerate(colors): ... print '%i. %s' % i ... 0. Azul 1. Vermelho 2. Amarelo 3. Verde 4. Branco
Muito legal!! zip e map são mesmo fantásticas.
Existe também um outro macete para agrupar uma lista em grupos de N elementos. É um oneliner impressionante! =)
map(None, *[iter([1,2,3,4,5,6,7,8])] * 3)Isso retorna uma lista de tuplas: [(1, 2, 3), (4, 5, 6), (7, 8, None)]
Aprendi esse macete faz um tempo. Parabéns pelo blog!