搜索重复项并将其删除

时间:2018-08-29 09:42:45

标签: python python-2.7

有时候我有这样的字符串

string = "Hett, Agva,"

,有时我会在其中重复。

string = "Hett, Agva, Delf, Agva, Hett,"

如何检查我的字符串中是否存在重复项,然后将其删除?

更新。

所以在第二个字符串中,我需要删除Agva和Hett,因为字符串中有2x个

5 个答案:

答案 0 :(得分:2)

遍历各个部分(单词),并将每个部分添加到一组可见的部分中,如果该部分中还没有该部分,则将其添加到列表中。最后。重建字符串:

seen = set()
parts = []
for part in string.split(','):
    if part.strip() not in seen:
        seen.add(part.strip())
        parts.append(part)

no_dups = ','.join(parts)

(请注意,由于此方法删除的某些单词的开头有空格,因此我必须向.strip()添加一些调用)

给出:

'Hett, Agva, Delf,'

为什么要使用一套?

要查询某个元素是否为in个集合,it is O(1) average case-因为它们是由散列存储的,因此使查找保持恒定的时间。另一方面,列表中的查找为O(n),因为Python必须遍历该列表,直到找到该元素为止。这意味着使用set可以更有效地执行此任务,因为对于每个新单词,您都可以立即检查以查看是否以前曾经见过,而您必须遍历{{1 }}的可见元素,否则将花费更长的时间。


哦,要检查是否有重复项,请查询拆分列表的长度是否与该列表的长度相同(删除重复项但会失去顺序)。

list

可以正常工作:

def has_dups(string):
    parts = string.split(',')
    return len(parts) != len(set(parts))

答案 1 :(得分:1)

如果单词顺序很重要,则可以在字符串中创建单词列表,然后遍历该列表以创建新的唯一单词列表。

string = "Hett, Agva, Delf, Agva, Hett,"
words_list = string.split()

unique_words = []
[unique_words.append(w) for w in words_list if w not in unique_words]
new_string = ' '.join(unique_words)
print (new_String)

输出:

'Hett, Agva, Delf,'

答案 2 :(得分:1)

您可以使用unique_everseen文档中的toolz.unique,或等效地使用itertools recipe,或等效地使用@JoeIddon的显式解决方案。

这是使用第三方toolz的解决方案:

x = "Hett, Agva, Delf, Agva, Hett,"

from toolz import unique

res = ', '.join(filter(None, unique(x.replace(' ', '').split(','))))

print(res)

'Hett, Agva, Delf'

我删除了空格,并使用filter清理了可能不需要的结尾,

答案 3 :(得分:1)

如果仅会收到此格式的字符串,则可以执行以下操作:

import numpy as np

string_words=string.split(',')
uniq_words=np.unique(string_words)

string=""
for word in uniq_words:
    string+=word+", "
string=string[:-1]

此代码的作用是将单词分成列表,找到唯一的项目,然后像以前一样将它们合并为字符串

答案 4 :(得分:0)

这看起来有点难看

float matrix[X][Y]

但是可以完成工作;)

希望有帮助!!请随时询问是否不清楚:)