什么是有效的python算法,用于删除列表中项格式如下的所有镜像文本重复项?
df.loc['2010-01-06']
必填结果:ExList = [' dutch italian english', ' italian english dutch', ' dutch italian german', ' dutch german italian' ]
答案 0 :(得分:0)
此解决方案使用set数据结构,并着重于生成紧凑的代码,大多数情况下具有列表/集合/生成器理解。如果这是初学者课程的一项家庭作业,而您只是复制结果,则很明显您不是自己编写代码。尝试遵循思考过程并自己重现结果。
1)在" "
(空格)处分割每个元素
for item in ExList:
splitted = item.split(" ")
2)由于输入中多余的空格,现在删除了空元素。可以使用列表理解
与上面的步骤(空字符串为“ falsy”)一起在1行中完成:for item in ExList:
splitted = [lang for lang in item.split(" ") if lang]
3)将结果放入一个集合中,该集合根据定义不考虑顺序,而忽略重复项。对于此步骤,我们首先需要无序标识的属性,即set([1, 2]) == set([2, 1])
。可以使用 generator comprehension
for item in ExList:
itemSet = set(lang for lang in item.split(" ") if lang)
现在,在该循环中,将所有这些语言集放入另一组。这次,因为所有具有相同顺序的相同项目集都被认为是相等的,所以外部项目集将自动忽略任何重复项。为了能够将项目集放入另一个集合中,它必须是不可变的(因为可变性可能会导致身份更改),在python中称为frozenset
。代码如下:
ExList = [' dutch italian english', ' italian english dutch', ' dutch italian german', ' dutch german italian' ]
result = set()
for item in ExList:
result.add(frozenset(lang for lang in item.split(" ") if lang))
或者,作为一行设置理解:
result = {frozenset(lang for lang in item.split(" ") if lang) for item in ExList}
结果如下:
>>> print(result)
{frozenset({'italian', 'dutch', 'german'}), frozenset({'italian', 'dutch', 'english'})}
如果设置的打印输出看起来令人困惑,您可以将其转换为列表
>>> print([list(itemSet) for itemSet in result])
[['italian', 'dutch', 'german'], ['italian', 'dutch', 'english']]
答案 1 :(得分:0)
这可能对您有用:
def unique_list(s):
x = set([tuple(sorted(s.split())) for s in ExList])
return [" ".join(s) for s in x]
print(unique_list(ExList)
答案 2 :(得分:0)
这可能不是最有效的解决方案,但希望对您有所帮助。
使用该属性,字典的键是唯一的。
m_dict = {}
for a in ExList:
b = a.split()
b.sort()
m_dict[' '.join(b)] = None
print m_dict.keys()