基本的に50個の整数の配列があり、50個の整数が等しいかどうかを調べる必要があります。私は行動を起こす必要がある。Pythonで配列内の値を比較する方法 - 2つの値が同じかどうか調べる
は、どのように私はこれを行うに行きますか?私が知っている限り、現在Pythonにはこれがありますか?あなたが意味する場合
基本的に50個の整数の配列があり、50個の整数が等しいかどうかを調べる必要があります。私は行動を起こす必要がある。Pythonで配列内の値を比較する方法 - 2つの値が同じかどうか調べる
は、どのように私はこれを行うに行きますか?私が知っている限り、現在Pythonにはこれがありますか?あなたが意味する場合
あなたがリストを持っていて、任意の重複する値がある場合は、リストからセットを作成し、それをリストより短いですかどうかを知りたい:
if len(set(my_list)) < len(my_list):
print "There's a dupe!"
これではないでしょうしかし、重複した値が何であるかを教えてください。
リストをセットに変換し、その長さを確認できます。
>>> a = [1, 2, 3]
>>> len(set(a)) == len(a)
True
>>> a = [1, 2, 3, 4, 4]
>>> len(set(a)) == len(a)
False
あなたの行動は、その数はその後groupby
が良い選択であるあなたの入力リストの上に繰り返しますどのように多くの倍の数を知っておく必要がありますまたは場合。
>>> from itertools import groupby
>>> for x in groupby([1,1,2,2,2,3]):
... print x[0],len(list(x[1]))
...
1 2
2 3
3 1
最初の数字は要素であり、2番目の数字は繰り返しの数です。 groupby
はソートされたリストで機能しますので、例えば入力リストをソートしてください。
>>> for x in groupby(sorted([1,1,2,4,2,2,3])):
... print x[0],len(list(x[1]))
...
1 2
2 3
3 1
4 1
Python 2.7以降を使用している場合は、Counter
を使用できます。
>>> import collections
>>> input = [1, 1, 3, 6, 4, 8, 8, 5, 6]
>>> c = collections.Counter(input)
>>> c
Counter({1: 2, 6: 2, 8: 2, 3: 1, 4: 1, 5: 1})
>>> duplicates = [i for i in c if c[i] > 1]
>>> duplicates
[1, 6, 8]
これはおそらく、あなたが* *番号が複数回現れることを知る必要がある場合には、おそらく最良の解決策です。 –
いいえ私はこのことを知らなかった。確かに私の答えよりも良い(+1) –
>>> arbitrary_list = [1, 1, 2, 3, 4, 4, 4]
>>> item_occurence = dict([(item, list.count(item)) for item in arbitrary_list])
{1: 2, 2: 1, 3: 1, 4: 3}
あなたは
>>> filter(lambda item: item_occurence[item] > 1, item_occurence)
[1, 4]
パーフェクト、おかげでそれらの値のリストを取得することができますユニークされていない値を参照したい場合は! もう1つのことですが、リスト内に重複した値がある場合、リストの長さはセットに変換されたときにどうして変わりますか? Do setsは重複を自動的に削除しますか?ありがとう – Taimur
@ Taimur:正確には、セットにはユニークなアイテムだけが含まれています。 – delnan