优化代码以检查列表元素是否唯一

Suj*_*itS 4 python optimization python-3.x

python3程序,如果它是唯一的,则输入一个列表并输出.以下是一个例子:

list_a = [1,2,3,4,5] #unique
list_b = [1,2,2,3,4] #not unique
Run Code Online (Sandbox Code Playgroud)

我为这个问题写了一个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")
Run Code Online (Sandbox Code Playgroud)

这是检查它的唯一方法吗?我打赌不是!我想要一些等同于上面的优化代码,或者只是为给定列表输出"unique"或"not unique".先感谢您.

awe*_*oon 12

最简单的方法是将给定列表的集合长度与列表长度进行比较:

if len(l) != len(set(l)):
    # not unique
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 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
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是最有效的算法. (2认同)
  • (请注意,将列表项单独添加到集合中的速度总是比直接从列表中创建集合慢得多,因此很多惩罚都来自于此.) (2认同)

tac*_*ell 6

将列表放入一组:

set_a = set(list_a)
if len(set_a) == len(list_a):
    print("unique")
else:
    print("not unique")
Run Code Online (Sandbox Code Playgroud)