Po prostu szukam pythonowej wersji Combination ofList<List<int>>
Biorąc pod uwagę listę list, potrzebuję nowej listy, która zawiera wszystkie możliwe kombinacje elementów między listami.
[[1,2,3],[4,5,6],[7,8,9,10]] -> [[1,4,7],[1,4,8],...,[3,6,10]]
Liczba list jest nieznana, więc potrzebuję czegoś, co zadziała we wszystkich przypadkach. Punkty bonusowe za elegancję!
python
combinations
Lin
źródło
źródło
*a
?*a
oznacza, że są to argumenty przekazywane do funkcji lub metody.def fn(a,b,c):
odpowiedziałby nafn(*[1,2,3])
odniesieniea
jako dane wejściowe, iterujeitertools.product(*a)
iyield
jest zarówno krotką wyprodukowaną przez, jakitertools
i wersją odwróconą ( np. utwórz listęreverse()
i przekonwertuj ją z powrotem na krotkę). Najlepiej zadaj nowe pytanie.Najbardziej eleganckim rozwiązaniem jest użycie itertools.product w Pythonie 2.6.
Jeśli nie używasz języka Python 2.6, dokumenty dla itertools.product faktycznie pokazują równoważną funkcję umożliwiającą wykonanie produktu w „ręczny” sposób:
źródło
Mam nadzieję, że uważasz to za tak eleganckie, jak wtedy, gdy go spotkałem.
źródło
Numpy może to zrobić:
źródło
Nie ma nic złego w prostej rekursji dla tego zadania, a jeśli potrzebujesz wersji, która działa z łańcuchami, może to pasować do twoich potrzeb:
źródło
Można do tego użyć podstawowego pythona. Kod potrzebuje funkcji do spłaszczenia list list:
Następnie można uruchomić:
Wynik:
źródło
Wynik:
źródło