【发布时间】:2020-10-11 15:00:28
【问题描述】:
如何在 python 中解决这个问题。
给定一个整数列表arr,编写一个返回true的函数当且仅当列表中每个值的出现次数在python中是唯一的
所以
a=[1, 2, 2, 3, 3, 3] 真
因为1的个数是1,所以2的个数是2,,,
a=[1, 2, 3, 3] 错误
因为1的个数是1,所以2的个数是1
【问题讨论】:
如何在 python 中解决这个问题。
给定一个整数列表arr,编写一个返回true的函数当且仅当列表中每个值的出现次数在python中是唯一的
所以
a=[1, 2, 2, 3, 3, 3] 真
因为1的个数是1,所以2的个数是2,,,
a=[1, 2, 3, 3] 错误
因为1的个数是1,所以2的个数是1
【问题讨论】:
def check_it(arr):
occ = [arr.count(e) for e in set(arr)]
return len(set(occ)) == len(occ)
【讨论】:
check_it([1, 2, 2, 3, 3, 3])不应该返回True吗?它返回 False
为了使列表的出现唯一,我们必须找到所有出现。为此,我们可以使用来自集合模块的计数器。 然后使用集合查找唯一元素并检查其大小。
from collections import Counter
ar = [1,2]
ar2 = [1,2,2,3,3,3]
def is_unique(ar):
occurence_list = Counter(ar).values()
return len(occurence_list) == len(set(occurence_list))
print(is_unique(ar))
print(is_unique(ar2))
输出
False
True
【讨论】:
问题是编写一个函数,如果列表中每个值的出现次数是唯一的,则返回 true。所以,例如
a=[1, 2, 2, 3, 3, 3] 真的 1的个数是1,2的个数是2,,,
a=[1, 2, 3, 3] 错误的 1的个数是1,2的个数是1
【讨论】:
天真的方法是将它们全部放在一个集合中,并依靠集合唯一性保证来完成工作。
如果您的列表很大,那么即使前两个元素相同并且会导致测试失败,您也会复制所有内容。这是一个非常好的 Pythonic 解决方案。不错,moctarjallo。
另一种方法是使用 set-hashed-lookup 功能提前退出。
def all_unique(a):
found = set()
for item in a:
if item in found:
return False
found.add(item)
return False
【讨论】:
假设你有这样的代码:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9,]
arr2 = [1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9,]
def contains_no_duplicates(arr):
return len(arr) == len(set(arr))
print(contains_no_duplicates(arr))
print(contains_no_duplicates(arr2))
有输出:
True
False
获取列表的set 会删除重复项。发生这种情况是因为集合中的每个条目都必须是唯一的,就像 dict 不能有重复的键一样。
【讨论】:
在不同的帖子中看到: Checking if all elements in a list are unique
def func(arr):
return len(arr) == len(set(arr)):
【讨论】: