更改函数内部的原始列表

时间:2018-11-22 08:43:31

标签: python python-2.7 duplicates

需要创建一个函数,该函数一次删除重复项而又不更改原始列表。 在第二个中,它需要更改原始列表并且不返回任何内容。 这里的问题是第二个函数只对一个重复起作用,而对两个不同的数字不起作用(它只删除一个数字(它对[2,3,4,5,3,4]不起作用,但是对[1,2, 3,3]

def drop_duplicates(lst):
    s = []
    # Write the rest of the code for question 3a below here.
    for i in lst:
       if i not in s:
           s.append(i)
    return s
lst = [1, 2, 3, 2, 4, 2]
print drop_duplicates(lst)
print lst

def drop_duplicates_in_place(lst):
    # Write the rest of the code for question 3b below here.
    for i in range(len(lst) - 1):
        for j in range ( i+1, len(lst) - 1):
            if lst[i] == lst[j]:
                lst.pop(j)
            else:
                continue

lst = [1, 2, 3, 2, 4, 2] 
print lst

1 个答案:

答案 0 :(得分:0)

内部循环范围太短:

for i in range(len(lst) - 1):
    for j in range(i+1, len(lst)):  # no -1 here

此外,您并不需要循环主体中的else部分。通常,嵌套循环和从列表的(中间)重复删除都不是理想的性能。推荐的方法也可以通过使用collections.OrderedDict在保持线性出现顺序的同时删除重复项。要使其就位,可以使用切片分配:

from collections import OrderedDict

def drop_duplicates_in_place(lst):
    lst[:] = OrderedDict.fromkeys(lst)