Python 3.x 删除无集合、无循环的重复项,保持顺序并更新原始列表
好的,所以我必须从列表中删除重复项,同时保持顺序。但是,存在某些条件,例如不允许使用set或for循环。此外,函数不能返回新列表,而是更新原始列表。我有下面的代码,但它只能部分工作,是的,我知道我只检查了一次,但我不知道如何继续Python 3.x 删除无集合、无循环的重复项,保持顺序并更新原始列表,python-3.x,duplicates,Python 3.x,Duplicates,好的,所以我必须从列表中删除重复项,同时保持顺序。但是,存在某些条件,例如不允许使用set或for循环。此外,函数不能返回新列表,而是更新原始列表。我有下面的代码,但它只能部分工作,是的,我知道我只检查了一次,但我不知道如何继续 def clean_list(values): i = len(values)-1 while i > 0: if values[i] == values[i-1]: values.pop(i)
def clean_list(values):
i = len(values)-1
while i > 0:
if values[i] == values[i-1]:
values.pop(i)
i -= 1
return values
values = [1, 2, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0]
new_values = clean_list(values)
print(new_values)
给我一个结果:
[1, 2, 0, 1, 4, 1, 2, 5, 4, 3, 1, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0]
谢谢尝试以下方法
使用两个while循环,第一个将获取您的唯一项,第二个将在列表的其余部分搜索任何其他匹配项并删除它们,从而保持顺序
def clean_list(lst):
i = 0
while i < len(lst):
item = lst[i] # item to check
j = i + 1 # start next item along
while j < len(lst):
if item == lst[j]:
lst.pop(j)
else:
j += 1
i += 1
values = [1, 2, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0]
clean_list(values)
print(values)
# Output
[1, 2, 0, 4, 5, 3]
def清洁列表(lst):
i=0
而i
更新:改进的功能更快,因为最坏的情况是第一个是O(n2)
def清洁列表(lst):
seen=set()
i=0
而i
def clean_list(lst):
seen = set()
i = 0
while i < len(lst):
item = lst[i]
if item in seen:
lst.pop(i)
else:
seen.add(item)
i += 1
values = [1, 2, 0, 1, 4, 1, 1, 2, 2, 5, 4, 3, 1, 3, 3, 4, 2, 4, 3, 1, 3, 0, 3, 0, 0]
clean_list(values)
print(values)
# Output
[1, 2, 0, 4, 5, 3]