4

python3 program that takes input a list and output if it is unique or not. The following is an example:

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

I have wrote a python3 script for this problem:

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")

Is this the only way to check it. I bet it isn't! I want some optimized code that is equivalent to above or simply that ouputs "unique" or "not unique" for a given list. Thank you in advance.

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 树,在树中一个一个地添加每个元素,而插入的元素尚未在树中。

在大列表的情况下,与您当前的代码相比,它会非常快。

于 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 回答