İki listeye katılmaya çalışıyorum ve birleştirilen listenin tüm olası kombinasyonlarını orijinal iki listenin sırasını koruyor. Örneğin: Siparişi tutarken iki listenin birleşimi
list_1 = [9,8]
list_2 = [2,1]
#output
combo= [9821,9281,2981,2918,2198,9218]
nerede listesi "tuşlarıyla" her eleman, ve hep önce gelir önce daima gelir de.
Şimdiye kadar, tüm olası permütasyonları yapmak için itertoollerden permütasyonları kullandım, ancak yeterince hızlı değil.
İşte ne var:
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
teşekkürler!
Sen rutin böyle bir görev oluşur beklemeliyim: * "İlk olarak, * listeleri birleştirin, * sonra, birleşik sonucu sıralayın. * (en sıradışı) * durum çubuğunda, ayrı ayrı bileşen listelerinin her birinin sıralanması gerektiğini kesinlikle gerektirir. –
Kullandığınız yöntem sort özelliğine sahip olan efsaneler listelenir, ancak listeler sıralanmaz. [9,1] ve [8,2] 'ye nasıl uygulanır? Orada başarısız oluyor. Kısa sürede bir çözüm göndermeyi deneyeceğim. –
Tüm permütasyonlara geçtiğinizde bile, mantık biraz karmaşık görünüyor. Pozisyonu kontrol etmek ve bir permütasyonu silmek için permutation.index (element) kullanabilirsiniz. –