Function to remove duplicates from a List | Python
本问题已经有最佳答案,请猛点这里访问。
我试图编写一个函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def remove_duplicates(x): z = [x[0]] for i in range(1,len(x)): y = i-1 k = 0 while y >= 0: if x[i] == x[y]: k = k + 1 y -= 1 else: break if k == 0: z.append(x[i]) return z |
使用内置的python集功能。
1 | y = list(set(x)) |
Y将是X的唯一元素列表。当X中的元素可以在一个集合中使用时,这就有效了,因此它们必须实现
如果你能用的话就好了
SET operator
要从列表中删除重复元素,请执行以下操作:
1 | my_list = [1, 2, 3, 1, 1, 1, 1, 1, 2, 3, 4] |
现在,从该列表中删除重复元素的时间:
1 2 3 | list(set(my_list)) Answer: [1, 2, 3, 4] |
您的代码的主要问题似乎在这里:
1 2 3 4 | while y >= 0: if x[i] == x[y]: k = k + 1 y -= 1 |
这里,只有当当前元素是匹配的时候,才会递减
如果你想忠于你最初的方法,你可以尝试一下:
1 2 3 4 5 6 7 8 9 | def remove_duplicates(x): z = [x[0]] for i in range(1,len(x)): for y in range(0, i): if x[i] == x[y]: break else: z.append(x[i]) return z |
但是请注意,有很多简单的方法可以确保元素是唯一的。例如,您可以使用
1 2 3 4 5 6 | def remove_duplicates(lst): res = [] for x in lst: if x not in res: res.append(x) return res |
如果保证元素是可散列的,那么也可以使用
1 2 3 4 5 6 7 8 | def remove_duplicates(lst): seen = set() res = [] for x in lst: if x not in seen: res.append(x) seen.add(x) return res |
如果你想要这样的一条直线,你可以使用
1 2 3 | import collections def remove_duplicates(lst): return collections.OrderedDict(zip(lst, lst)).values() |