A = [1,2,2,2,3]
cleaned_A = [1,2,3]
我知道remove()方法或将列表A转换为集合。 我想知道是否有更快的方法可以在不改变数据结构的情况下这样做?
答案 0 :(得分:1)
使用set使值唯一:
cleaned_A = list(set(A))
答案 1 :(得分:1)
您可以将其转换为集合,然后返回到列表中以删除重复项。试试这个:
>>> A = [1,2,2,2,3]
>>> A = list(set(A))
>>> A
[1, 2, 3]
答案 2 :(得分:1)
将其转换为set
,然后以这种方式返回list
:
cleaned_A = list(set(A))
答案 3 :(得分:1)
没有套装
>>> list({}.fromkeys(A))
[1, 2, 3]
答案 4 :(得分:1)
解决方案必须至少为O(N)
,因为您必须至少检查一次列表中的所有项目。
所以,让我们说A = [1,2,2,2,3]
cleaned_A = set()
for i in A:
cleaned_A.add(i)
答案 5 :(得分:0)
试试这个。
>>> A = [1,2,2,2,3]
>>> reduce(lambda seen, item: seen + [item] if item not in seen else seen, A, [])
[1, 2, 3]
答案 6 :(得分:0)
这不是我的第一选择,但你可以list.index和list.pop来删除列表中早先存在的项目。这样你就可以保留原有的结构。
A = [1,2,2,2,3]
i = len(A) - 1
while i >= 0:
if A.index(A[i]) != i:
A.pop(i)
i -= 1
但是,多次修改列表比从头开始构建新列表要贵一些。这个方法已经是O(N ^ 2)。
我建议只使用列表(set(A))方法,除非你有一个禁止它的特定用例。