Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 删除无集合、无循环的重复项,保持顺序并更新原始列表_Python 3.x_Duplicates - Fatal编程技术网

Python 3.x 删除无集合、无循环的重复项,保持顺序并更新原始列表

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)

好的,所以我必须从列表中删除重复项,同时保持顺序。但是,存在某些条件,例如不允许使用set或for循环。此外,函数不能返回新列表,而是更新原始列表。我有下面的代码,但它只能部分工作,是的,我知道我只检查了一次,但我不知道如何继续

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]