2016-12-28 4 views
0

ここを見て、リストを比較する方法がたくさん見つかりました。しかし、私の具体的な質問をカバーしていない1は...ので、ここでそれが行く:リスト内の要素を比較する方法はありますが、重複が存在する場合は要素の末尾を除外する方法:要素の末尾を含む新しいリストを作成する

を私がリストを持っている:

currentList = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

私は重複を削除したいが、私は' index:1'または' index:3'かを含めたくありませんその件については、番号の後ろに数字が付いている'index'です。

次に、新しいリストを作成したいと思います。currentListに重複が見つかった場合は、重複の要素が1つしかない新しいリストを作成したいと思いますが、新しい要素に数字重複で見つかった

currentList = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

currentListの要素を比較した後に作成された新しいリスト:新しいリストが作成されたときに

基本的に、私はこのようなことの違いをしたいと思います。

newList = ["Blur1['size']: $gui 13", "Blur2['mix']: $gui?4:8"] 

新しいリストのみ"Blur1['size']: $gui" の1つの要素を持っているが、それは組み合わせ番号1及び3は、currentListで重複から生じる、文字列の末尾に追加しました。

私はインデックスを残して重複を削除する方法を知っている、私は文字列に'index'が存在する場合には、テストでそれを行うことができます..私が直面している問題は、'index'の後ろに番号を保持し、 'index'文字列の後ろのすべての数字が1つの単一要素。

これは意味があると思います。このPythonの問題について私は大いに感謝しています。

答えて

0

アプローチがsplit()と、このようないくつかのlist comprehensionsで(currentListの同じ順序を維持するために)OrderedDictを使用することになります。

from collections import OrderedDict 

current_list = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

temp = [item.split('index:') for item in current_list] 

d = OrderedDict() 

for i in temp: 
    if len(i) == 2: 
     d[i[0]] = i[1] if i[0] not in d else '{}{}'.format(d[i[0]], i[1]) 
    else: 
     d[i[0]] = "" 

new_list = ['{}{}'.format(*item) for item in d.items()] 

出力:

>>> new_list 
["Blur1['size']: $gui 13", "Blur2['mix']: $gui?4:8"] 
+0

ありがとう@ettanany、非常に注文を維持するのに便利です。とても有難い! – Tor

+0

あなたはウェルカムです!上記の 'currentList'に対してのみテストしたので、汎用ユースケースでうまく動作しない場合は、教えてください。たとえば、Blur2 ['mix']:$ gui?4:8 "'、 "" Blur2 ['mix']:$ gui?4:9 "'と ' "Blur2 ['mix']:あなたのリストに$ gui?3:5" '。 – ettanany

+0

クイックテスト後に正常に動作しているようです。私は、異なるパラメータでより多くのテストをした後に問題に遭遇するかどうかを知らせます。ありがとう! – Tor

関連する問題