python从后面删除重复项_函数从列表中删除重复项| Python

代码的主要问题似乎是:while y >= 0:

if x[i] == x[y]:

k = k + 1

y -= 1

在这里,只有当当前元素是匹配的时,才减少y,否则将进入无限循环。另外,还必须删除else: break,否则add循环将在列表中的第一个唯一元素之后(即在第一个元素之后)立即停止

如果你想坚持你最初的方法,你可以试试: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

但是,请注意,有很多简单的方法可以确保元素是唯一的。例如,您可以使用in检查当前元素是否已经在结果列表中,而不是单独检查每个元素。def remove_duplicates(lst):

res = []

for x in lst:

if x not in res:

res.append(x)

return res

如果元素保证是散列的,那么还可以使用set。但是不要做return list(set(lst)),因为这不会保留列表中元素的顺序。这比使用x not in res要快一些。def remove_duplicates(lst):

seen = set()

res = []

for x in lst:

if x not in seen:

res.append(x)

seen.add(x)

return res

如果您想要这样的一行代码,可以使用OrderedDict但是:import collections

def remove_duplicates(lst):

return collections.OrderedDict(zip(lst, lst)).values()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值