-1

Pythonにいくつかのリストがあり、各リストにある値のみを取得したいのですが、それを直接実行する関数はありますか?

たとえば、私は持っています:

{'a','b','c','d','e'},{'a','g','c','d','h','e'}, {'i','b','m','d','e','a'}

を含むリストを1つ作成したい

{'a','d','e'}

しかし、実際にリストがいくつあるかわかりません。値「i」に依存しているためです。

助けてくれてありがとう!

4

4 に答える 4

5

要素が一意でハッシュ可能である場合(および結果で順序が重要でない場合)、setintersectionを使用できます例:

 common_elements = list(set(list1).intersection(list2).intersection(list3))

これは、機能的には次のものと同等です。

 common_elements = list( set(list1) & set(list2) & set(list3) )

&演算子はセットでのみ機能しますが、メソッドintersectionは任意の反復可能で機能します。

リストのリストがあり、それらすべての共通部分が必要な場合は、これを簡単に行うことができます。

 common_elements = list( set.intersection( * map(set, your_list_of_lists) ) )

これを指摘してくれたDSMに特に感謝します

または、ループを使用することもできます。

 common_elements = set(your_list_of_lists[0])
 for elem in your_list_of_lists[1:]:
     common_elements = common_elements.intersection(elem)  #or common_elements &= set(elem) ...
 else:
     common_elements = list(common_elements)

元のリストにあった順序を本当に取得したい場合は、単純な並べ替えを使用してそれを行うことができることに注意してください。

common_elements.sort( key = lambda x, your_list_of_lists[0].index(x) )

構造上、ここで発生するリスクはありませんValueError

于 2012-08-23T11:49:03.097 に答える
3

テーブルにワンライナーを置くだけです:

l=['a','b','c','d','e'],['a','g','c','d','h'], ['i','b','m','d','e']  
reduce(lambda a, b: a & b, map(set, l))  

また

from operator import and_
l=['a','b','c','d','e'],['a','g','c','d','h'], ['i','b','m','d','e']  
reduce(and_, map(set, l))  
于 2012-08-23T11:58:34.697 に答える
1

最初のリストからsetを作成してから、setの.intersection()メソッドを使用する必要があります。

a, b, c = ['a','b','c','d','e'], ['a','g','c','d','h'], ['i','b','m','d','e']
exists_in_all = set(a).intersection(b).intersection(c)

更新しました。mgilsonのコメント によると簡略化されています。

于 2012-08-23T11:52:15.527 に答える
0
from operator import and_

import operator
a = [['a','b','c','d','e'],['a','g','c','d','h','e'], ['i','b','m','d','e','a']]
print list(reduce(operator.and_, map(set, a)))

それはあなたにリストからcommeen要素を与えるでしょう

['a', 'e', 'd']
于 2012-08-23T13:50:54.577 に答える