2016-03-21 17 views
2

İki listeye sahibim, bunları birleştirmek istiyorum. Onları varsayalım list_left ve list_right olarak birleştirme kuralı:İki listeyi yinelenen öğe olmadan tek bir bekletme düzeninde birleştirin

  1. iki liste yinelenen elemanı vardır ve birleştirilmiş sonuç listesi yinelenen elemanı vardır.
  2. Birleştirilen öğelerin sırası list_left ve list_right ile aynı olmalıdır. iki eleman (e1, e2) list_left ve list_right hem görünür ve bunların düzeni list_left ve list_right farklı ise
  3. . Siparişi list_right'da tutmalıdır. Diğer bir deyişle, e1, list_right numaralı telefondan'un önündeyse e1, e2'un birleştirilmiş listesinde bulunmadan önce, list_left'da ne olursa olsun.
  4. Yukarıdaki üç kuralda bazı öğelerden bahsedilmiyorsa, sonuç birleştirilmiş listenin herhangi bir yerinde görünebilir.

bazı örnekler:

list_left: w h i j k 
list_right: a w t i n 
merged:  a w h t i j k n 


list_left: w h i j k 
list_right: j w m n a 
merged:  j w h i k m n a 


list_left: j w m n a 
list_right: w h i j k 
merged:  w h i j m n a k 


list_left: a b c d 
list_right: e f g h 
merged:  a b c d e f g h 

bu sorunla yapmak için herhangi bir yöntem var mı?

+0

Herhangi bir sorunuz varsa lütfen @me, açıklamayı düzeltirim. –

cevap

2

Sadece list_left'dan list_merged numaralı ürüne ait öğeleri kopyalayın. Ancak, list_right numaralı numaralı ve list_merged numaralı bir öğede göründüğünüzde, list_right öğesinden bu öğeye kadar öğeleri kopyalayın. list_left ile Bittiğinde, list_right kalan ne kopyalayın:

list_left = "whijk" 
list_right = "jwmna" 
list_merged = "" 
pos = 0 

for x in list_left: 
    if not x in list_merged: 
    if x in list_right: 
     xpos = list_right.index(x) 
     list_merged += list_right[pos:xpos] 
     pos = xpos + 1 
    list_merged += x 
list_merged += list_right[pos:] 

print list_merged 

Eğer setleri bir çift oluşturmak ve bu setlerde arama tarafından listelerde arama yerini alabilecek performansını artırmak için.

+0

"list_left" = "obxyhruz", "list_right' =" ryz "olduğunda çalışmaz, sonuç" obxryhuz "değil" obxhryuz "olmalıdır. Çünkü, 'h' ve 'r' sıralaması kural 2'ye göre 'list_left' ile aynı olmalıdır. Kural 3 yalnızca 'r' ve 'y' çakışması sırasını etkiler. –

+0

Kuralları doğru olarak anlarsam, kural 2 'h' önce 'r' olması için reçete ve aynı kural 'y' sonra 'h' için reçete eder. Ayrıca 3. kural, 'y'den önce' r 'gerektirir. Bütün bu koşullar aynı anda karşılanamadığı için, burada hangi kuralların geçerli olduğunu detaylı bir şekilde analiz etmeliyiz. 3. kuramda çelişki yoktur. Fakat hükmün “h” hakkında ne söyleyeceği sorulabilir? Sadece 'h' için geçerli değildir. Yani 'h' için tek çalışma kuralı kural 4'tür. Ve 'h' için herhangi bir yer seçebilirdik. –

+0

Dediğiniz gibi, 'h' için tek çalışma kuralı kural 4'tür. Benim hatam, sorunu örnek olarak değiştireceğim ve cevabınızı kabul ediyorum. –