2017-01-08 5 views
2

私はちょうどPythonを学び始めました。Python:リスト内の要素と最大の一致数を持つ要素を比較する

私はリストの要素を比較しようとしています。ほとんどのマッチング要素が['red', 'blue', ' white']であるように、リストの要素の残りの部分と['red','blue','black']と試合の最大の数とそれらの要素を印刷:今すぐ

list = [['red', 'blue', 'black'], ['red', 'blue', ' white'], ['red', 'pink']] 

は、どのように私は要素0を比較することができます。たとえば、私はリストを持っています

mylist = [set(item) for item in list] 
for i, item in enumerate(mylist): 
    for i1 in xrange(i + 1, len(mylist)): 
     for val in (item & mylist[i1]): 
      print "Index {} matched with index {} for value 
{}".format(i,i1,val) 
      if i == 0: 
       print list[(i1)] 
:私はこのような何かをするために管理し、この時点で

:次['red', 'pink']

更新

出力: Python: Compare elements in a list to each other

Index 0 matched with index 1 for value "Red" 
['red', 'blue', ' white'] 
Index 0 matched with index 1 for value "Blue" 
['red', 'blue', ' white'] 
... 

私は解決策を発見しました。

ご協力いただければ幸いです。おかげさまで

+1

は、あなたがこれまでにしようとしているかを示すことはできますか?実装のどの部分が困難になっているのかを説明します。 – idjaw

+0

カウンタを使用してみてください - https://docs.python.org/2/library/collections.html#counter-objects –

+0

[set {](https://docs.python.org/2/library/stdtypes) .html#set-types-set-frozenset)。 – mkrieger1

答えて

1

あなたは交差点のセットの長さでリストを並べ替えることができます。

key = ['red', 'blue', 'black'] 
l = [['red', 'pink'], ['red', 'blue', ' white'], ['red', 'blue', 'black']] 
sorted_by_matching = sorted(l, key=lambda x: -len(set(x) & set(key))) 

print(sorted_by_matching) 
>> [['red', 'blue', 'black'], ['red', 'blue', ' white'], ['red', 'pink']] 
+0

ありがとう、私の問題に非常に簡単な解決が、私は質問がある。 3つの回答のうち、例えばony 2を印刷するにはどうすればよいですか? どのように私は印刷された方法を変更することができますか? – user7375796

+0

@ user7375796リストの[スライス](http://stackoverflow.com/q/509211/4229825)を入手できます。最初のn個の要素を取得したい場合は、単にl [:n] 'を実行します。例えば、最初の2要素: 'l [:2]'は、 '' [red '、' blue '、' black ']、[' red '、' blue '、' white '] ' 。 – 0x1337

+0

はい!私はとても愚かな、ありがとう! – user7375796

関連する問題