我正在编写一个Python程序,其中我将把数字附加到列表中,但我不希望列表中的数字重复。那么,在执行list.append()
之前,如何检查数字是否已经在列表中?
我正在编写一个Python程序,其中我将把数字附加到列表中,但我不希望列表中的数字重复。那么,在执行list.append()
之前,如何检查数字是否已经在列表中?
你可以做
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
set
没有 append
方法。你肯定是想用 add
。 - Rohit JainTrue
作为值的OrderedDict
也可以使用。 - Fred FooOrderedDict
的主要优点在于你只需要一个容器对象,而不必定义一个新类。 - Fred Foo>>> 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文档中被提到。
not in
操作符来检查元素 num
是否已经存在于列表 l
中,如果不存在,则将其添加到列表中,最后返回该列表。 - Rohit Jains = 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
要检查一个数字是否在列表中,可以使用in
关键字。
让我们创建一个列表
exampleList = [1, 2, 3, 4, 5]
contains = 4 in exampleList
print(contains)
>>>> True
由于您想在列表中没有元素时进行追加,因此 not in
也可以帮助实现。
exampleList2 = ["a", "b", "c", "d", "e"]
notcontain = "e" not in exampleList2
print(notcontain)
>>> False
但是,正如其他人所提到的,您可能需要考虑使用不同的数据结构,更具体地说,set
。请参见以下示例(来源):
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
'orange' in basket # fast membership testing
True
'crabgrass' in basket
False
# Demonstrate set operations on unique letters from two words
...
a = set('abracadabra')
b = set('alacazam')
a # unique letters in a
>>> {'a', 'r', 'b', 'c', 'd'}
a - b # letters in a but not in b
>>> {'r', 'd', 'b'}
a | b # letters in a or b or both
>>> {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b # letters in both a and b
>>> {'a', 'c'}
a ^ b # letters in a or b but not both
>>> {'r', 'd', 'b', 'm', 'z', 'l'}
set
呢? - loganfsmyth