【问题标题】:Add duplicates to a set or check if the elements exists then add将重复项添加到集合或检查元素是否存在然后添加
【发布时间】:2020-06-17 10:48:08
【问题描述】:

在 python 中使用集合,我想将许多项目添加到我的集合中,其中一些可能已经存在于该集合中。

在不检查是否已经存在的情况下将项目添加到集合中是否更快,或者检查集合中是否已经存在每个项目并且仅在不存在时才添加是否更快?

【问题讨论】:

  • 渐近地说,两者都需要O(n) 时间来构建集合。可能是他们俩的时间。我会使用set(iterable)

标签: python duplicates set


【解决方案1】:

无需检查即可添加更快。每次您将一个项目添加到一个集合时,它都需要检查该项目是否存在 - 如果该项目存在,之前检查不会为您节省任何时间,但如果它不存在则浪费时间,因为它将是检查了两次。

【讨论】:

    【解决方案2】:

    您不能将重复项添加到集合中,因此检查没有意义。请参阅 Python 的集合文档:

    https://docs.python.org/2/tutorial/datastructures.html#sets

    集合是没有重复元素的无序集合。基本用途包括成员资格测试和消除重复条目。您可以尝试添加一个副本,但它实际上不会将其添加到集合中。它会忽略它。

    p = set([2,3,4,5])
    
    p.add(99) # try to add 99 to existing set
    print p
        result: set([99, 2, 3, 4, 5])
    p.add(99) # try to add 99 again. Notice the set doesn't change
    print p
        result: set([99, 2, 3, 4, 5])
    

    【讨论】:

      【解决方案3】:

      如果您想检查您的列表是否有新项目,您可以使用以下代码:

      yourlist=[1,2,3,4,5] #This is only needed if you are checking for duplicate numbers
      newitem=2
      new=1
      for i in range(len(yourlist)):
          if yourlist[i]==newitem:
          new=0
      if new==1:
          yourlist.append(newitem)
      print(yourlist)
      

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        你不需要检查!

        集合就是这样,它们没有重复项。看看the docs,他们清楚地声明集合没有重复。如果尝试将重复项添加到集合中,编译器会“忽略它”并传递到下一段代码。

        【讨论】:

          猜你喜欢
          • 2017-07-02
          • 1970-01-01
          • 1970-01-01
          • 2020-04-20
          • 2018-10-08
          • 2011-04-06
          • 2012-10-25
          • 2023-03-16
          • 1970-01-01
          相关资源
          最近更新 更多