4

リストを入力し、それが一意かどうかを出力する python3 プログラム。次に例を示します。

list_a = [1,2,3,4,5] #unique
list_b = [1,2,2,3,4] #not unique

この問題に対して python3 スクリプトを作成しました。

for i in range(len(list_a)):
   j = i+1
   for j in range(len(list_a)):
      if list_a[i] == list_a[j]:
         print ("not unique")
      else:
         print ("unique")

確認方法はこれだけでしょうか。そうじゃないに違いない!上記と同等の最適化されたコード、または単に特定のリストに対して「一意」または「一意ではない」を出力するコードが必要です。前もって感謝します。

4

5 に答える 5

12

これを行う最も簡単な方法は、指定されたリストのセットの長さとリストの長さを比較することです。

if len(l) != len(set(l)):
    # not unique
于 2013-10-27T15:24:44.773 に答える
8

とセットを使用できますall()。これは、繰り返し項目が見つかるとすぐに短絡します。

>>> def solve(lis):
...     seen = set()
...     return all(item not in seen and not seen.add(item) for item in lis)
... 
>>> solve(range(5))
True
>>> solve([1,2,2,3,4])
False
于 2013-10-27T15:24:46.840 に答える
6

リストをセットにスローします。

set_a = set(list_a)
if len(set_a) == len(list_a):
    print("unique")
else:
    print("not unique")
于 2013-10-27T15:24:55.217 に答える
0

AVL ツリーを使用して、挿入された要素がまだツリーにない間に、各要素を 1 つずつツリーに追加できます。

大きなリストの場合、現在のコードと比較して非常に高速になります。

于 2013-10-27T15:32:23.150 に答える
0

重複する要素を簡単に見つけたい場合は、collections.Counter を使用できます。

import collections
a = [1, 2, 2, 3]
b = collections.Counter(a)
duplicates = [i for i in b if b[i] > 1]

変数bは辞書のように機能するオブジェクトで、キーは値でaあり、値は元のリストにこの値が何回出現したかを示す数値です。

print(b[2])

2を与えるでしょう。

変数duplicatesにはすべて重複した要素があり、次のように使用できます。

if duplicates:
    print("not unique")
else:
    print("unique")

これはセットを生成するよりも時間がかかりますが、使用できる情報ははるかに多くなります。

于 2013-10-27T15:46:48.533 に答える