检查python中的列表中是否已存在数字

时间:2013-02-02 23:15:40

标签: python list

我正在编写一个python代码,我将把数字添加到列表中,但我不希望列表中的数字重复。那么在我做list.append()之前,如何检查列表中是否已有数字?

4 个答案:

答案 0 :(得分:59)

你可以做到

if item not in mylist:
     mylist.append(item)

但你真的应该使用一套,如下:

myset = set()
myset.add(item)

编辑:如果订单很重要,但您的列表非常大,则应该同时使用列表,如下所示:

mylist = []
myset = set()
for item in ...:
    if item not in myset:
        mylist.append(item)
        myset.add(item)

这样,您可以快速查找元素存在,但是您可以保留订单。如果您使用天真的解决方案,您将获得查找的O(n)性能,如果您的列表很大,这可能会很糟糕

或者,正如@larsman指出的那样,你可以使用OrderedDict来达到同样的效果:

from collections import OrderedDict

mydict = OrderedDict()
for item in ...:
    mydict[item] = True

答案 1 :(得分:7)

如果您想在列表中包含唯一元素,那么为什么不使用集合,当然,订单对您来说无关紧要: -

>>> s = set()
>>> s.add(2)
>>> s.add(4)
>>> s.add(5)
>>> s.add(2)
>>> s
39: set([2, 4, 5])

如果订单是一个值得关注的问题,那么您可以使用: -

>>> def addUnique(l, num):
...     if num not in l:
...         l.append(num)
...     
...     return l

您还可以找到OrderedSet

中引用的Python Documentation食谱

答案 2 :(得分:2)

如果您想要按升序排列数字,可以将它们添加到一个集合中,然后将该集合排序为升序列表。

s = set()
if number1 not in s:
  s.add(number1)
if number2 not in s:
  s.add(number2)
...
s = sorted(s)  #Now a list in ascending order

答案 3 :(得分:1)

您可能会使用set对象。只需add个数字即可。它们固有地不会复制。