我正在编写一个python代码,我将把数字添加到列表中,但我不希望列表中的数字重复。那么在我做list.append()
之前,如何检查列表中是否已有数字?
答案 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
答案 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
个数字即可。它们固有地不会复制。