私は次のようなリストを作成するプログラムを持っています:
["abc a","hello","abc","hello z"]
私の目標はリスト内を移動することであり、要素が文字列の1つに含まれている場合は、文字列を削除します
最初の反復:
abc a can't be found in any other element
["abc a","hello","abc","hello z"]
二つ目:
hello is present in element 4:
["abc a","hello","abc"]
三つ目:
abc can be found in element one:
["hello","abc"]
filter()関数を使用しようとしましたが成功しませんでした
すべての要素を関数に渡してほしい唯一の問題は、リストサイズが小さくなっていることです。したがって、これは、処理方法がわからない別の問題です。
ありがとうございました
1つのアプローチは次のとおりです。
このような:
lst = ["abc a","hello","abc","hello z"]
words = sorted([set(x.split()) for x in lst],key=len)
result = []
for l in words:
if not result or all(l.isdisjoint(x) for x in result):
result.append(l)
print(result)
セットのリストを出力します。
[{'hello'}, {'abc'}]
このアプローチでは単語の順序が失われますが、単語の区切り文字に問題はありません。部分文字列アプローチは次のようになります。
lst = ["abc a","hello","abc","hello z"]
words = sorted(lst,key=len)
result = []
for l in words:
if not result or all(x not in l for x in result):
result.append(l)
print(result)
プリント:
['abc', 'hello']
(このアプローチは単語の区切り文字で問題になる可能性がありall
ますが、split
これを回避するために条件をそこに簡単に適合させることができます)。次のような条件の例:
if not result or all(set(x.split()).isdisjoint(l.split()) for x in result):
向きを変えるだろう:
lst = ["abc a","hello","abc","abcd","hello z"]
に
['abc', 'abcd', 'hello']
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加