【发布时间】:2016-01-14 14:36:48
【问题描述】:
我有一个函数,当输入一个列表和该列表中的特定字符串时,从列表中删除该特定字符串的任何重复项。 (find_start 和 find_end 是确定某个字符串的第一个和最后一个位置的单独函数)
def remove_duplicates(sorted_list, item):
i = 0
real_list = []
for x in range(len(sorted_list)-1):
if(sorted_list[i] == item):
a = find_start(sorted_list, item)
b = find_end(sorted_list, item)
real_list = real_list + [item]
i = i+(b-a)
else:
real_list = real_list + [sorted_list[i]]
i+=1
return real_list
例如,remove_duplicates(['a','a','b','b','c','c'], 'a') 将返回 ['a','b','b','c','c']
我正在尝试定义另一个函数,每次迭代都在其中使用这个函数,就像这样
def remove_all_duplicates(sorted_list):
i = 0
list_tru = []
for x in range(len(sorted_list)):
list_tru = remove_duplicates(sorted_list, sorted_list[i])
i+=1
return list_tru
但是如果我输入remove_all(['a','a','b','b','c','c']),它会输出['a','a','b','b','c']。我做错了什么?
【问题讨论】:
-
您每次通过循环重新分配
list_tru。由于您没有在循环期间修改sorted_list,因此您只是删除了最后一个元素的重复项。 -
在你的第二种情况下,你想做
list_tru = sorted_list并在你的for循环中list_tru = remove_duplicates(list_tru, sorted_list[i]) -
为什么不直接测试
sorted_list[i]是否在list_tru中,如果不在则添加? -
您的目标是消除列表中的重复项还是只是学习如何实现这样的算法?如果是前者,请考虑使用
set()。 -
Brian,这是使用
remove_duplicates消除列表中的所有重复项(仅删除特定重复项)