Python:函数和列表?

时间:2015-10-15 23:48:09

标签: python list function

我有一个函数,当在该列表中输入列表和特定字符串时,从列表中删除该特定字符串的所有重复项。 (find_startfind_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']。我做错了什么?

4 个答案:

答案 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

希望这会有所帮助。祝你有愉快的一天。