python用函数对列表删除_Python-仅通过使用filter和lambda删除列表中的...

您需要以某种方式保持一些状态.如果可以使用新列表,则可以执行以下操作:

g = l[:]

filter(lambda x: g.remove(x) is None and g.count(x) == 0, l)

上面删除重复项的方式有所不同.如果l = [1、2、2、3、2],则最终结果为[1、3、2].

或创建一个空列表并使用它来跟踪您所看到的内容:

seen = []

return filter(lambda x: seen.append(x) is None if x not in seen else False, l)

上面两种都与使用集合非常相似,尽管效率要低得多. :-)两者都使用愚蠢的机制允许对列表进行适当的更改,但返回True / False结果(两者中的None部分均允许我们将表达式链接在一起).

如果可以使用map和enumerate,则可以执行以下操作:

map(lambda t: t[1],

filter(lambda t: l[:t[0]].count(t[1]) == 0, enumerate(l)))

(它使用当前索引查看列表的前一部分以查找重复项)

如果可以使用列表推导,则可以删除对map的使用:

[x for i, x in filter(lambda t: l[:t[0]].count(t[1]) == 0,

enumerate(l))]

如果可以使用reduce,则可以执行以下操作:

reduce(lambda r, x: r + [x] if x not in r else r, l, [])

因为您可以通过将结果从一个迭代传递到下一个迭代来保持状态.

但是无论如何,您将需要记录所见内容.尽管没有简化的版本,但这些都不是我所谓的优雅的Python代码-尽管它没有性能.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值