有时我有这样的字符串
string = "Hett, Agva,"
有时我会在其中重复。
string = "Hett, Agva, Delf, Agva, Hett,"
我如何检查我的字符串是否有重复项,如果确实存在则删除它们?
更新。
所以在第二个字符串中我需要删除 Agva 和 Hett,因为字符串中有 2x 它们
最佳答案
遍历部分(单词)并将每个部分添加到一组可见部分和部分列表(如果它不在该集合中)。最后。重建字符串:
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,'
为什么要使用集合?
要查询一个元素是否在
一个集合中,it is O(1)
average case - 因为它们是由散列存储的,这使得查找时间恒定。另一方面,在列表中查找是 O(n)
,因为 Python 必须遍历列表直到找到元素。这意味着此任务使用 set
效率要高得多,因为对于每个新词,您可以立即检查是否已经看到 in before 而您必须迭代一个所见元素的 list
否则,对于大型列表而言,这将花费更长的时间。
哦,为了检查是否有重复项,查询拆分列表的长度是否与该列表的集合相同(这会删除重复项但会丢失顺序)。
即
def has_dups(string):
parts = string.split(',')
return len(parts) != len(set(parts))
按预期工作:
>>> has_dups('Hett, Agva,')
False
>>> has_dups('Hett, Agva, Delf, Agva, Hett,')
True
关于python - 搜索重复项并删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074329/