我有一个函数,当在该列表中输入列表和特定字符串时,从列表中删除该特定字符串的所有重复项。 (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']
。我做错了什么?
答案 0 :(得分:0)
每次迭代,您都会继续回到原来的sorted_list
。我建议复制它,然后在该副本上操作:
def remove_all_duplicates(sorted_list):
list_tru = sorted_list[:] # copy it
for x in set(sorted_list): # just use a set
list_tru = remove_duplicates(list_tru, x) # remove this character from your list
return list_tru
我还将已排序的列表转换为set
,这样您就不会尝试多次删除同一个字母的重复项,并删除了不必要的i
计数器。
当然,如果您真正想要做的就是从排序的字符串列表中删除重复项,并且您没有附加到正在开发的算法上,那就特别简单了:
new_list = sorted(set(old_list))
答案 1 :(得分:0)
def remove_all_duplicates(L):
# NOTE: this modifies L IN-PLACE. Tread carefully
i = 1
while i<len(L):
if L[i] == L[i-1]:
del(L[i])
continue
i += 1
用法:
In [88]: L = ['a','a','b','b','c','c']
In [89]: remove_all_duplicates(L)
In [90]: L
Out[90]: ['a', 'b', 'c']
答案 2 :(得分:0)
def remove_duplicates(sorted_list):
for item in sorted_list:
hits = sorted_list.count(item)
while hits > 1:
sorted_list.remove(item)
hits = sorted_list.count(item)
return sorted_list
print(remove_duplicates(["a","a", "b", "b"]))
这是我现场可以提出的最简单的方法,使用.count来判断是否有重复返回[&#34; a&#34;,&#34; b&#34;]
答案 3 :(得分:0)
您也可以使用它:
A = ['a','a','b','c','c'] #example of input list with duplicates
value = remove_duplicates(A) #pass the list to the function
print value #prints ['a','b','c']
def remove_duplicates(A):
B = [] #empty list
for item in A:
if item in B:
pass
else:
B.append(item) #Append the list
return B
希望这会有所帮助。祝你有愉快的一天。