リストに数字を追加するPythonプログラムを書いていますが、リスト内の数字を繰り返したくありません。では、確認する前に、番号がすでにリストにあるかどうかを確認するにはどうすればよいlist.append()
ですか?
5 に答える
あなたができる
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
リストに一意の要素を含めたい場合は、セットを使用しないでください。もちろん、順序は重要ではありません。-
>>> 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
PythonドキュメントOrderedSet
で参照されているレシピも見つけることができます
番号を昇順で表示する場合は、番号をセットに追加してから、セットを昇順のリストに並べ替えることができます。
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
代わりに、おそらくsetオブジェクトを使用できます。add
セットに番号を付けるだけです。それらは本質的に複製されません。
番号がリストにあるかどうかを確認するには、in
キーワードを使用できます。
リストを作成しましょう
exampleList = [1, 2, 3, 4, 5]
次に、番号4が含まれているかどうかを確認しましょう。
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'}