Próbuję połączyć dwie listy i wypisać wszystkie możliwe kombinacje połączonej listy, która zachowuje kolejność oryginalnych dwóch list. Na przykład:Połączenie dwóch list przy zachowaniu zamówienia
list_1 = [9,8]
list_2 = [2,1]
#output
combo= [9821,9281,2981,2918,2198,9218]
gdzie każdy element na liście "combo", zawsze przychodzi przed i zawsze przychodzi przed .
Do tej pory użyłem permutacji z itertools do zapętlenia wszystkich możliwych permutacji, ale nie jest wystarczająco szybki.
Oto co mam:
from itertools import permutations
seq = [5, 9, 8, 2, 1]
plist = []
root = seq[0]
left = filter(lambda x: x > root, seq)
right = filter(lambda x: x < root, seq)
for pseq in permutations(seq[1:]):
pseq = (root,) + pseq
if list(filter(lambda x: x > root, pseq)) == left and list(filter(lambda x: x < root, pseq)) == right:
plist.append(pseq)
print plist
Dzięki!
Należy rutynowo spodziewać takie zadanie składa się z: * "najpierw, * połącz listy, * następnie, * sortuj połączony wynik. * W przypadku * (najbardziej nietypowym) * na pasku, powinieneś z pewnością wymagać posortowania poszczególnych składników każdego z nich: –
Metoda, której używasz dotyczy właściwości sort, ale listy nie są sortowane. Jak miałoby to zastosowanie do [9,1] i [8,2]? Tam się nie udaje. Postaram się wkrótce opublikować rozwiązanie. –
Nawet po przejściu przez wszystkie permutacje, logika wydaje się nieco skomplikowana. Możesz użyć permutation.index (element), aby sprawdzić pozycję i wyciągnąć permutację. –