Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从列表中删除与同一列表中的其他字符串具有相同单词集(顺序混乱)的字符串_Python_String_Python 3.x_List - Fatal编程技术网

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

我有一个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','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']