2017-01-29 13 views
3

のリストで共通の要素を検索します。したがって、上記のリストの私の所望の出力は次のようになります。このような次のように私は単語リストと呼ばれる単語のリストのリストを持っているリスト

sets = set(tuple(row) for row in wordlist) 

セットの外観:

{('cow', 'pig', 'bomb', 'cat', 'sheep', 'cake', 'boy', 'new'), ('dog', 'cat', 'sheep', 'rabbit', 'kiss', 'time')} 

['cat', 'sheep'] 

これを達成するために、私は以下のコードを使用してセットを作成しました

リストごとに任意の数の単語を入れることができ、任意の数のリストを含めることができます。だから私はどんな数の不均一なセットで終わることができます。交差メソッドを使って2つのセットを比較することはできますが、複数のセットを比較して共通アイテムだけを返すにはどうすればよいですか?

答えて

10

setが間違って使用されています。なりますcommon_itemsによって値ホールド

common_items = set.intersection(*map(set, my_list)) 

my_list = [['dog', 'cat', 'sheep', 'rabbit', 'kiss', 'time'], ['cow', 'pig', 'bomb', 'cat', 'sheep', 'cake', 'boy', 'new']] 

# convert list of list to list of sets 
my_sets = map(set, my_list) 

# perform intersection on each set present in list 
common_items = set.intersection(*my_sets) 

をこのとして1行で記述することができます:あなたは好きで、それを使用することができ

{'sheep', 'cat'} 

ここソリューションは、同じ与えています結果はわずかにの効率的なアプローチ

#        v no need to type-cast sub-lists to `set` here 
set(my_list[0]).intersection(*my_list[1:]) 

# OR, 
# set(my_list[0]).intersection(*my_list) 
# as intersection of set with itself returns the same set 

set.intersectionはすべてのiterableを受け入れるので、設定するすべてのサブリストを型キャストする必要はありません。

0

最も簡単な方法は、セットへの入力を変換するためにmap()を使用して、彼らの共通点を見つけるためにset.intersectionを使用することです:

>>> data = [['dog', 'cat', 'sheep', 'rabbit', 'kiss', 'time'], 
      ['cow', 'pig', 'bomb', 'cat', 'sheep', 'cake', 'boy', 'new']] 
>>> set.intersection(*map(set, data)) 
{'sheep', 'cat'} 
0

は、共通の要素を取得するために、この方法を試してみてください。

wordlist ={('cow', 'pig', 'bomb', 'cat', 'sheep', 'cake', 'boy', 'new'), ('dog', 'cat', 'sheep', 'rabbit', 'kiss', 'time')}</i> 
for word in wordlist: 
    for cm in word: 
     if(cm in cm): 
      print(cm) 
関連する問題