36

リストに数字を追加するPythonプログラムを書いていますが、リスト内の数字を繰り返したくありません。では、確認する前に、番号がすでにリストにあるかどうかを確認するにはどうすればよいlist.append()ですか?

4

5 に答える 5

74

あなたができる

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
于 2013-02-02T23:18:47.700 に答える
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

PythonドキュメントOrderedSetで参照されているレシピも見つけることができます

于 2013-02-02T23:17:42.770 に答える
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
于 2013-02-03T00:27:29.247 に答える
1

代わりに、おそらくsetオブジェクトを使用できます。addセットに番号を付けるだけです。それらは本質的に複製されません。

于 2013-02-02T23:17:45.953 に答える
0

番号がリストにあるかどうかを確認するには、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'}
于 2021-11-21T13:29:31.600 に答える