开发者社区> 问答> 正文

在Python中从序列中删除项目的方法?

当我在Python中编写代码时,我经常需要根据某些条件从列表或其他序列类型中删除项目。我还没有找到优雅高效的解决方案,因为从当前正在迭代的列表中删除项目是不好的。例如,你不能这样做:

for name in names: if name[-5:] == 'Smith': names.remove(name) 我通常最终做这样的事情:

toremove = [] for name in names: if name[-5:] == 'Smith': toremove.append(name) for name in toremove: names.remove(name) del toremove 这是无效的,相当丑陋和可能有错误(它如何处理多个'John Smith'条目?)。有没有人有更优雅的解决方案,或者至少更有效?

展开
收起
游客6qcs5bpxssri2 2019-09-05 22:27:15 678 0
1 条回答
写回答
取消 提交回答
  • 完成过滤的两种简单方法是:

    使用filter:

    names = filter(lambda name: name[-5:] != "Smith", names)

    使用列表推导:

    names = [name for name in names if name[-5:] != "Smith"]

    请注意,这两种情况都保留谓词函数评估的值True,因此您必须反转逻辑(即您说“保留没有姓氏史密斯的人”而不是“删除姓氏的人”)史密斯“)。

    2019-09-05 22:28:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载