Python 如何从列表中删除与同一列表中的其他字符串具有相同单词集(顺序混乱)的字符串
我有一个Python字符串列表 例如:Python 如何从列表中删除与同一列表中的其他字符串具有相同单词集(顺序混乱)的字符串,python,string,python-3.x,list,Python,String,Python 3.x,List,我有一个Python字符串列表 例如: ['abc xyz def','efg jk','apple','def abc xyz', 'orange', 'jk efg'] 我想从这个列表中删除包含常用词的重复字符串。上述数据的输出应为: ['abc xyz def','efg jk','apple','orange'] 我发现集合。计数器(a)=集合。计数器(b)可以检测这种重复性,但如何有效地完成上述任务?这应该会有所帮助 l = ['abc xyz def','efg jk','app
['abc xyz def','efg jk','apple','def abc xyz', 'orange', 'jk efg']
我想从这个列表中删除包含常用词的重复字符串。上述数据的输出应为:
['abc xyz def','efg jk','apple','orange']
我发现集合。计数器(a)=集合。计数器(b)
可以检测这种重复性,但如何有效地完成上述任务?这应该会有所帮助
l = ['abc xyz def','efg jk','apple','def abc xyz', 'orange', 'jk efg']
c = tuple((i, " ".join(sorted(i.split()))) for i in l)
#(('abc xyz def', 'abc def xyz'), ('efg jk', 'efg jk'), ('apple', 'apple'), ('def abc xyz', 'abc def xyz'), ('orange', 'orange'), ('jk efg', 'efg jk'))
res = []
check_val = []
for k, v in c:
if v not in check_val:
res.append(k)
check_val.append(v)
print(res)
输出:
['abc xyz def', 'efg jk', 'apple', 'orange']
图书馆提供了一个很好的解决方案。注toolz.unique
等同于itertools
文档中的unique\u everseen
配方:
from toolz import compose, unique
L = ['abc xyz def','efg jk','apple','def abc xyz', 'orange', 'jk efg']
res = list(unique(L, key=compose(frozenset, str.split)))
# ['abc xyz def', 'efg jk', 'apple', 'orange']
函数组合不是本机提供的,但可以由lambda x:frozenset(x.split())
代替frozenset
或已排序的集合是必需的,因为unique
需要哈希键。如果单词的计数也必须相同,则应使用已排序的集合。您可以执行以下操作:
list( {' '.join(sorted(i.split())):i for i in l}.keys())
['abc def xyz', 'efg jk', 'apple', 'orange']
或
或
a = [' '.join(sorted(i.split())) for i in l]
list(dict(zip(a,a)))
['abc def xyz', 'efg jk', 'apple', 'orange']
sorted(set(a), key=lambda x: a.index(x))
['abc def xyz', 'efg jk', 'apple', 'orange']