既存のリストで番号を検索したいと思います。この数値の 1 つが繰り返される場合は、変数の値を true に設定し、ループを中断します。
list = [3, 5, 3] //numbers in list
したがって、関数が 2 つの同じ数値を取得した場合は、ブレークします。この場合、3 が繰り返されます。
どうやってするか?
まず、リストに名前を付けないでくださいlist
。これはPythonに組み込まれているものであり、変数名として使用すると、望ましくない副作用が発生する可能性があります。L
代わりにそれを呼びましょう。
リストをそれ自体の設定バージョンと比較することで、問題を解決できます。
編集:あなたは繰り返しがあるときに真になりたいのですが、その逆ではありません。コードを編集しました。
def testlist(L):
return sorted(set(L)) != sorted(L)
あなたが使用することができcollections.Counter()
ますany()
:
>>> lis=[3,5,3]
>>> c=Counter(lis)
>>> any(x>1 for x in c.values()) # True means yes some value is repeated
True
>>> lis=range(10)
>>> c=Counter(lis)
>>> any(x>1 for x in c.values()) # False means all values only appeared once
False
またはsets
、長さを使用して一致させます。
In [5]: lis=[3,3,5]
In [6]: not (len(lis)==len(set(lis)))
Out[6]: True
In [7]: lis=range(10)
In [8]: not (len(lis)==len(set(lis)))
Out[8]: False
セットを調べることができます。リストをループして、番号をサポート セットに追加するか、ループを抜け出します。
>>> l = [3, 5, 3]
>>> s = set()
>>> s
set([])
>>> for x in l:
... if x not in s:
... s.add(x)
... else:
... break
さらに一歩進んで、このコードから関数を作成し、見つかった最初の重複番号を返すこともできます (またはNone
、リストに重複が含まれていない場合)。
def get_first_duplicate(l):
s = set()
for x in l:
if x not in s:
s.add(x)
else:
return x
get_first_duplicate([3, 5, 3])
# returns 3
それ以外の場合、「このリストには重複が含まれていますか?」という質問に対するブール値の回答が必要な場合は、重複要素の代わりにそれを返すことができます。
def has_duplicates(l):
s = set()
for x in l:
if x not in s:
s.add(x)
else:
return true
return false
get_first_duplicate([3, 5, 3])
# returns True
センダーレは次のように指摘した。
このロジックを数行に圧縮するために人々が時々使用するイディオムがあります。必ずしもお勧めするわけではありませんが、知っておく価値はあります。
s = set(); has_dupe = any(x in s or s.add(x) for x in l)
list
変数に名前を付けてはいけません-list
は Python の型であり、そのような組み込みの名前をマスクするあらゆる種類の問題を自分自身に与えることができます。のようなわかりやすい名前を付けnumbers
ます。
そうは言っても...セットを使用して、すでに見た数字を追跡できます。
def first_double(seq):
"""Return the first item in seq that appears twice."""
found = set()
for item in seq:
if item in found:
return item
# return will terminate the function, so no need for 'break'.
else:
found.add(item)
numbers = [3, 5, 3]
number = first_double(numbers)
追加メモリなし:
any(l.count(x) > 1 for x in l)