有没有办法保留列表中元素的原始顺序? 我的代码如下,我将其作为输出
值:[1, 3, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0]
清洁:[5, 2, 4, 1, 3, 0]
我需要[1, 2, 0, 4, 5, 3]
作为“清洁”列表
def remove_duplicates(lst)
i = len(lst)
while i>0:
while values.count(values[i]>1:
values.remove(values[i])
i-=1
i-=1
return
使用for循环和新的列表输出解决这个问题似乎很简单,但是我需要使用while循环并且只使用一个列表。
def remove_duplicates(lst):
new =[]
for x in lst:
if x not in lst:
new.append(x)
return new
答案 0 :(得分:1)
def remove_duplicates(lst):
i = 0
while i < len(lst):
j = i + 1
while j < len(lst): # check for duplicates of lst[i] and remove them
if lst[i] == lst[j]:
del lst[j]
else:
j += 1 # only increment second idx if the item is not removed!
i += 1
return
测试它:
>>> lst = [1, 3, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0]
>>> remove_duplicates(lst)
>>> lst
[1, 3, 0, 4, 2, 5]
您也可以使用set
而不是第二个while循环来实现它(这肯定会更快,但我不确定是否允许!):
def remove_duplicates(lst):
i = 0
found = set()
while i < len(lst):
if lst[i] in found:
del lst[i]
else:
found.add(lst[i])
i += 1
return
在list.remove
的文档中可以找到关于你的方法无法工作的快速说明:
list.remove(x)的
从列表中删除值为x的第一项。如果没有这样的项目,则会出错。
但你要删除除第一个以外的所有事件!