Minęło trochę czasu i mam problem z owinięciem głowy algorytmem, który staram się stworzyć. Zasadniczo mam dwie listy i chcę uzyskać wszystkie kombinacje dwóch list.
Być może nie tłumaczę tego poprawnie, oto przykład.
name = 'a', 'b'
number = 1, 2
wyjście w tym przypadku byłoby:
1. A1 B2
2. B1 A2
Problem polega na tym, że mogę mieć więcej pozycji w zmiennej „name” niż pozycji w zmiennej „number” (liczba zawsze będzie równa lub mniejsza niż zmienna name).
Jestem zdezorientowany, jak wykonać wszystkie kombinacje (zagnieżdżone dla pętli?), A jeszcze bardziej zdezorientowany w logice, aby przesunąć elementy w zmiennej name w przypadku, gdy w nazwie jest więcej elementów niż na liście liczb.
Nie jestem najlepszym programistą, ale myślę, że mogę spróbować, jeśli ktoś pomoże mi wyjaśnić logikę / algorytm, aby to osiągnąć. Właśnie utknąłem na zagnieżdżonych pętlach.
Aktualizacja:
Oto wynik z 3 zmiennymi i 2 liczbami:
name = 'a', 'b', 'c'
number = 1, 2
wynik:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
źródło
Odpowiedzi:
Uwaga : Ta odpowiedź dotyczy konkretnego pytania zadanego powyżej. Jeśli jesteś tutaj od Google i po prostu szukasz sposobu na uzyskanie kartezjańskiego produktu w Pythonie,
itertools.product
lub proste zrozumienie listy może być tym, czego szukasz - zobacz inne odpowiedzi.Załóżmy
len(list1) >= len(list2)
. Wtedy to, co wydaje się chce to wziąć wszystkie permutacje długościlen(list2)
odlist1
i dopasować je z pozycji z listy2. W python:Zwroty
źródło
zip
i nie jest podobna.Najprostszym sposobem jest użycie
itertools.product
:źródło
Może być prostszy niż najprostszy powyżej:
bez importu
źródło
Szukałem listy pomnożonej przez siebie tylko z unikatowymi kombinacjami, która jest zapewniona jako ta funkcja.
Tutaj jako fragment dokumentacji Pythona na temat
itertools
To może pomóc ci znaleźć to, czego szukasz.źródło
Możesz spróbować zapoznać się z listą zawierającą jeden wiersz:
źródło
najlepszym sposobem na znalezienie wszystkich kombinacji dla dużej liczby list jest:
wynikiem będzie:
źródło
Lub odpowiedź KISS dla krótkich list:
Nie tak wydajne jak itertools, ale używasz Pythona, więc wydajność już nie jest twoim głównym problemem ...
Lubię też wszystkie inne odpowiedzi!
źródło
niewielkie ulepszenie odpowiedzi z interjay, aby wynik był spłaszczony.
referencja z tego linku
źródło
Bez narzędzi
źródło
Odpowiadając na pytanie „biorąc pod uwagę dwie listy, znajdź wszystkie możliwe kombinacje par jednego elementu z każdej listy” i używając podstawowej funkcjonalności Pythona (tj. Bez itertools), a tym samym ułatwiając replikację dla innych języków programowania:
Zwroty
źródło
Lepsze odpowiedzi na to działają tylko w przypadku określonych długości dostarczonych list.
Oto wersja, która działa na dowolne długości danych wejściowych. Wyjaśnia również algorytm pod względem matematycznych koncepcji kombinacji i permutacji.
To daje:
źródło