2016-03-21 11 views
2

私は2つのリストを持っています。それらを想定list_leftlist_right としてマージルールは次のとおりです。2つのリストを重複する要素なしで1つの保持順序にマージする

  1. 2つのリストには、重複する要素を持っていない、とマージされた結果リストには、重複する要素を持っていません。
  2. マージされる要素の順序は、list_leftlist_rightと同じでなければなりません。
  3. 二つの要素(e1e2)がlist_leftlist_rightの両方に表示され、それらの順序はlist_leftlist_rightで異なる場合。注文はlist_rightに保存する必要があります。つまり、e1e2より前の場合はlist_leftlist_rightの場合、e1e2よりも前で合併リストにある必要があります。
  4. 上記の3つのルールにいくつかの要素が記載されていない場合は、結果のマージされたリストのどこにでも表示できます。

いくつかの例:

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 

は、この問題をどうするのいずれかの方法がありますか?

+0

ご不明な点がございましたら、@me、私は説明を修正します。 –

答えて

2

list_leftの要素は、まだlist_mergedにコピーしてください。しかし、list_leftlist_rightの要素があり、list_mergedではない場合は、list_rightからこの要素までコピーします。 list_leftが終了したら、list_rightに残っているものをコピーします。

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 

あなたがセットのペアを作成し、これらのセットでの検索によりリストに検索を置き換えることができ、パフォーマンスを向上させるために。

+0

'list_left' =" obxyhruz "、' list_right' = "ryz"のときは機能しません。結果は "obxryhuz"ではなく "obxhryuz"でなければなりません。規則2はルール2に従ってルール 'h'と 'r'の順序が 'list_left'と同じでなければならないからです。ルール3は 'r'と 'y'の衝突順序にのみ影響します –

+0

ルールを正しく理解すれば、ルール2は 'h'を 'r'の前に、そして同じルールは 'h'を 'y'の後にするように規定している。また、ルール3では、 'y'の前に 'r'が必要です。これらの条件はすべて同時に満たされないため、ここでどのルールが適用可能かを詳細に分析する必要があります。ルール3には矛盾はありませんが、ルール2は何を 'h'と言いますか? 'h'には適用されません。つまり、「h」の唯一の作業ルールはルール4です。そして、「h」のための任意の場所を選択することができます。 –

+0

あなたが言ったように、 'h'の唯一の作業ルールはルール4です。間違い、私は問題の例を修正し、あなたの答えを受け入れます。 –

関連する問題