"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como compactar listas de tamanhos diferentes usando `itertools.cycle` em Python?

Como compactar listas de tamanhos diferentes usando `itertools.cycle` em Python?

Publicado em 2024-11-24
Navegar:795

How to Zip Differently Sized Lists Using `itertools.cycle` in Python?

Zipando listas de tamanhos diferentes usando funções integradas

Embora a função zip integrada não seja capaz de repetir a lista mais curta ao mesclar duas listas de tamanhos diferentes, você pode aproveitar a função itertools.cycle para alcançar esse resultado.

cycle do pacote Python itertools cria um iterador que retorna elementos repetidamente de um iterável, mesmo após seu esgotamento. Ao combinar zip com ciclo, é possível lidar com a discrepância de tamanho entre as listas e garantir que a lista mais longa seja repetida conforme necessário.

Exemplo:

A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = ["A", "B", "C"]

# Use itertools.cycle to repeat the shorter list
from itertools import cycle
zip_list = zip(A, cycle(B)) if len(A) > len(B) else zip(cycle(A), B)

Neste exemplo:

  • if len(A) > len(B) verifica se a primeira lista (A) é maior que a segunda (B).
  • Se sim, ele usa zip para mesclar A com um iterador de ciclo de B, efetivamente repetindo B em todo o resultado mesclado.
  • Se B for mais longo, ele inverte a ordem e alterna A.

Resultado:

zip_list conterá as seguintes tuplas como um objeto gerador:

[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'A'), (5, 'B'), (6, 'C'), (7, 'A'), (8, 'B'), (9, 'C')]

Como funciona:

itertools.cycle cria uma cópia do iterável (neste caso, B) e retorna repetidamente seus elementos. À medida que o zip itera por A, ele emparelha cada elemento com o próximo elemento disponível no iterador de ciclo.

Se A for menor que B, o processo recomeçará do início de B quando seu iterador se esgotar. Por outro lado, se A for mais longo, o iterador B circulará continuamente para preencher o restante da lista mesclada.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3