删除列表python中的镜像重复字符串?

时间:2019-02-12 18:19:50

标签: python

什么是有效的python算法,用于删除列表中项格式如下的所有镜像文本重复项?

df.loc['2010-01-06']

必填结果:ExList = [' dutch italian english', ' italian english dutch', ' dutch italian german', ' dutch german italian' ]

3 个答案:

答案 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()