需要创建一个函数,该函数一次删除重复项而又不更改原始列表。 在第二个中,它需要更改原始列表并且不返回任何内容。 这里的问题是第二个函数只对一个重复起作用,而对两个不同的数字不起作用(它只删除一个数字(它对[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
答案 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)