2017-06-15 15 views
-4

Pythonリストで重複する文章を削除しようとしています。 1つの文章を別の文章に含めることができます。私は最長の文章を保持したいと思います。Pythonリストで重複する文を削除する

例えば処理後

my_list = ['Her name is Laura and she\'s from Texas','October','He owns a 
    dog and a cat', 'Her name is Laura', 'He owns a dog', 'Marie will turn 
    eighteen in October'] 

my_list = ['Her name is Laura and she\'s from Texas','He owns a 
    dog and a cat', 'Marie will turn eighteen in October'] 
+0

すでに試行したコードを入力してください – dhdavvie

+0

単純な文字列比較は本当に問題を解決しますか? 「彼は猫を所有している」、「彼は犬を所有している」、「彼は猫と犬を所有しています」という文章があればどうでしょうか?あなたがコンテンツを分析できないなら、あなたの結果は奇妙なものになるだろうと私は思う。 – am2

答えて

3

A(わずかにより良い)、二次溶液、次に小さいエントリが後続の大きな文字列内のサブストリングがあるかどうかを確認。

my_list = sorted(my_list, key=lambda x: -len(x)) # sort in descending order of length 

indices_to_delete = [] 
for i, x in enumerate(my_list[:]): 
    for j, y in enumerate(my_list[:][i:]): 
     if x in y: 
      indices_to_delete.append(i) 
      break 

my_list = [x for i, x in enumerate(my_list) if i not in indices_to_delete] 

1つの落とし穴は、データを並べ替えることです。それが起こらないようにしたい場合は、使用しないでください。

+0

これは簡単な解決策である。しかし、私は恐れている、それは少し複雑かもしれない。もし、f。 「彼は猫を所有している」、「彼は犬を所有している」、「彼は猫と犬を所有しています。私は、コンテンツを分析するのは自然なことだと思います。そして、このPythonは間違ったツールかもしれません。おそらくPrologなどの方法を見つけるのが簡単かもしれません。 – am2

+0

@ am2 OPは、彼がそのような事件を処理する必要があることを示すために彼の質問に証拠を与えていないか、何か不足していますか? –

+0

私が知っているのは、私がその答えを有用とマークした理由です。しかし、問題はまだ存在する。正規表現やその他のものを使うこともできます。しかし、f。私のために "10月"と ".. 10月に"は冗長ではない、テキストだけが似ています。それはあなたの問題ではなく、OPの問題です。 「ANDYは違法です」、「SANDYは病気です」は「SANDYは違法です」としますか? – am2

0

このメソッドは、各文字列がリスト内の他の文字列の部分文字列である回数をカウントアップし、複数の部分文字列である文字列をすべて削除します。

my_list = [ 
    'Her name is Laura and she\'s from Texas', 'October', 
    'He owns a dog and a cat', 'Her name is Laura', 'He owns a dog', 
    'Marie will turn eighteen in October' 
] 

redundant_counts = [ 
    len([sent for other_sent in my_list if sent in other_sent]) for sent in my_list 
] 

my_list = [ 
    sent for count, sent in zip(redundant_counts, my_list) if count == 1 
] 
関連する問題