Já faz um tempo e estou tendo problemas para entender meu algoritmo que tento criar. Basicamente, tenho duas listas e quero obter todas as combinações das duas listas.
Talvez eu não esteja explicando isso corretamente, então aqui está um exemplo.
name = 'a', 'b'
number = 1, 2
a saída neste caso seria:
1. A1 B2
2. B1 A2
A parte complicada é que eu posso ter mais itens na variável "nome" do que itens na variável "número" (o número sempre será igual ou menor que a variável do nome).
Estou confuso sobre como fazer todas as combinações (aninhadas para loop?) E ainda mais confuso quanto à lógica para alterar os itens na variável name, caso haja mais itens no nome do que na lista de números.
Não sou o melhor programador, mas acho que posso tentar se alguém puder me ajudar a esclarecer a lógica / algoritmo para conseguir isso. Então, eu só fiquei preso em aninhados para loops.
Atualizar:
Aqui está a saída com 3 variáveis e 2 números:
name = 'a', 'b', 'c'
number = 1, 2
resultado:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
fonte
Respostas:
Nota : Esta resposta é para a pergunta específica feita acima. Se você está aqui no Google e está procurando uma maneira de obter um produto cartesiano em Python,
itertools.product
ou uma simples lista de compreensão pode ser o que você está procurando - veja as outras respostas.Suponha
len(list1) >= len(list2)
. Então o que você parecem querer é tomar todas as permutações de comprimentolen(list2)
delist1
e combiná-los com itens de list2. Em python:Devoluções
fonte
zip
e similar.A maneira mais simples é usar
itertools.product
:fonte
Pode ser mais simples que o mais simples acima:
sem qualquer importação
fonte
Eu estava procurando por uma lista multiplicada por si só com apenas combinações únicas, fornecidas como essa função.
Aqui, como um trecho dos documentos do Python sobre
itertools
Isso, você pode encontrar o que procura.fonte
Você pode tentar entender uma lista de uma linha:
fonte
a melhor maneira de descobrir todas as combinações para um grande número de listas é:
o resultado será:
fonte
Ou a resposta do KISS para listas curtas:
Não é tão eficiente quanto as ferramentas, mas você está usando python, portanto o desempenho já não é sua principal preocupação ...
Eu também gosto de todas as outras respostas!
fonte
uma pequena melhoria para a resposta do interjay, para fazer o resultado como uma lista plana.
referência a partir deste link
fonte
Sem ferramentas
fonte
Respondendo à pergunta "com duas listas, encontre todas as permutações possíveis de pares de um item de cada lista" e usando a funcionalidade básica do Python (ou seja, sem itertools) e, portanto, facilitando a replicação para outras linguagens de programação:
Devoluções
fonte
As melhores respostas para isso funcionam apenas para comprimentos específicos de listas que são fornecidos.
Aqui está uma versão que funciona para qualquer comprimento de entrada. Também esclarece o algoritmo em termos dos conceitos matemáticos de combinação e permutação.
Isso gera:
fonte