如何在最少的句子中删除列表中的相同项目?

时间:2014-05-21 04:42:47

标签: python

A = [1,2,2,2,3]
cleaned_A = [1,2,3]

我知道remove()方法或将列表A转换为集合。 我想知道是否有更快的方法可以在不改变数据结构的情况下这样做?

7 个答案:

答案 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))方法,除非你有一个禁止它的特定用例。