如何检查平面列表中是否有重复项?

新手上路,请多包涵

For example, given the list ['one', 'two', 'one'] , the algorithm should return True , whereas given ['one', 'two', 'three'] it should return False .

原文由 teggy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 182
2 个回答

如果所有值都是可哈希的,请使用 --- set() 删除重复项:

 >>> your_list = ['one', 'two', 'one']
>>> len(your_list) != len(set(your_list))
True

原文由 Denis Otkidach 发布,翻译遵循 CC BY-SA 3.0 许可协议

仅推荐用于 列表:

 any(thelist.count(x) > 1 for x in thelist)

不要 在长列表上使用——它花费的时间可能与列表中项目数的 平方 成正比!

对于带有可哈希项(字符串、数字等)的较长列表:

 def anydup(thelist):
  seen = set()
  for x in thelist:
    if x in seen: return True
    seen.add(x)
  return False

如果您的项目不可散列(子列表、字典等),它会变得更毛茸茸,但如果它们至少具有可比性,仍然有可能获得 O(N logN)。但是您需要知道或测试项目的特征(可散列与否,可比较与否)以获得最佳性能 - 可散列为 O(N),不可散列可比较为 O(N log N),否则它下降到 O(N 平方) 并且对此无能为力:-(。

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题