【发布时间】:2022-07-18 20:17:51
【问题描述】:
听说我有一个列表,我必须从中获取重复项。所以我可以使用这样的解决方案:
arr = [1, 1, 2, 3, 4, 4, 5]
def get_duplicates(arr):
duplicates = []
for index in range(len(arr)-1):
if arr[index] == arr[index+1]:
duplicates.append(arr[index])
return duplicates
print(*duplicates)
好的,如果我的列表中有三个或更多重复项怎么办?我做了这样的事情:
arr = [1, 1, 1, 2, 3, 4, 4, 4, 4, 5]
def get_duplicates(arr):
duplicates = []
for index in range(len(arr)-1):
if arr[index] == arr[index+1]:
duplicates.append(arr[index])
return duplicates
print(*set(duplicates))
我的代码是否都适用于 O(n)?我只是不知道python中set()函数的速度是多少,但我认为第一个for循环需要O(n), 如果 set() 需要 O(n),那没关系,因为在这种情况下,最后我将有 O(2n) = O(n)。
我是否正确解决了该任务,或者我的代码无效?聪明的人,请帮助我)) 如果你知道如何在正确的方向上做,请解释一下。
-
原代码没有找到不相邻的重复;您没有说明是否可能出现此类重复。
-
我正在使用 set,因为我只需要从我的列表中获取重复项。如果我只使用不带循环的集合,我将从 [1,1,2,3,4,4,5] -> [1,2,3,4,5] 获得,但我最终需要获得 1,4
-
我将始终有相邻的重复项,因为我的列表总是在条目时排序。我永远不会得到 [1,2,1,2,3,3,4]。在排序列表中将始终是 [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,5] 重复项始终相邻。
-
被排序的列表最好包含在问题中。
-
您的代码(特别是
if的正文)没有正确缩进。
标签: python-3.x list duplicates big-o