2017-08-18 10 views
1

質問:私はセットのリストを持っていますが、各セットに固有のアイテムはどのようにして見つけられますか?セットのリストに1セットのみ属するアイテムを見つける

=====

私はNLTKで遊んと単語が各コーパスに固有そのうち興味があったので、私は、各コーパス間の単語セットの対称差を確認するために迅速なスクリプトを作りました。それは振り返って明らかだった理由のためにはうまくいきませんでした(画像参照)が、今はまだ各セットのユニークなアイテムを見つける方法に悩まされていますか?

私はSOので、私は、私は私のコードそれ

[1]

を投稿しようと思いました上で、このような何かを見つけることができませんて驚いた:

import pandas as pd 
import re 
from nltk.corpus import words, brown, webtext, reuters, wordnet, gutenberg 

words_only_in_one_corpus = set() 
for corpus in {words, brown, webtext, reuters, wordnet, gutenberg}: 
    words_only_in_one_corpus ^= {word.lower() for word in set(corpus.words())} 

df = pd.DataFrame(data=list(words_only_in_one_corpus), columns=["words"]) 
for corpus in {words, brown, webtext, reuters, wordnet, gutenberg}: 
    corpus_name = re.findall(".*\\\\(.*?)'>", str(corpus))[-1] 
    if corpus_name == "words": corpus_name = "words_corpus" 

    print(corpus_name, "...") 
    df[corpus_name] = df.words.isin({word.lower() for word in set(corpus.words())}) 

df 
+0

私は重複してマークされた投稿が最良の答えを持っていると思います。しかし、そのタイトルを推測していないだろう – Alter

答えて

0

のはArrがリストであるとしましょうセット。

newArr = [] 
for theSet in Arr: 

    tempSet =() 

    for item in theSet: 

     check = 1 

     for anotherSet in Arr: 

      if item in anotherSet and anotherSet != theSet: 
       check *= 0 
      elif anotherSet.count(item) > 1: 
       check *= 0 

     if check == 1: 
      tempSet += item 

    newArr.append(tempSet) 
関連する問題