python - 搜索重复项并删除它们

标签 python python-2.7

有时我有这样的字符串

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/

相关文章:

python - 使用 Numpy 屏蔽填充给定值的单元格

python - Windows 上的 Xgboost 安装错误 .OSError : [WinError 127] The specified procedure could not be found

Python pandas 将绝对值加到一个系列中的正数/负数

python - ContentType.objects.get_for_model(obj) 在代理模型对象上使用时返回基类模型

python - 如何处理矩阵 [None, 32, 32] 和矩阵 [32, 32] 与 `tf.matmul` 之间的乘积?

python - 在 MySQLdb 中使用变量作为字段名称,Python 2.7

python - 在 Python 范围函数中使用自定义顺序

python - Tensorflow 1.13.1 tf.data 将多个图像与单行映射在一起

Python使方法不可变

python - Selenium python无法向下滚动