【问题标题】:elegant list manipulation in pythonpython中的优雅列表操作
【发布时间】:2013-03-20 10:59:29
【问题描述】:

在python中,执行以下操作的最首选(pythonic)方式是什么:

给你一个列表。如果列表不为空,则列表中的所有项目都保证为字符串。列表中的每个项目要么是空字符串,要么保证在项目上调用 isdigit() 时返回 True

从这样一个列表开始,以最优雅的方式结束一个列表,使得它包含原始列表中的所有项目,除了空字符串?

【问题讨论】:

  • 我想我所尝试的一切都与问题无关。
  • 这可能是相关的。很高兴表明您已经努力尝试过。
  • 你说它可能是相关的,但你没有说如何。所以让我问这个问题——它究竟是如何相关的?为什么你会认为答案取决于我首先做了哪些努力?
  • 答案并不取决于您尝试过什么,但它通常会使您的问题更清晰,表明您自己努力解决了问题,并且通常有助于问题变得更好.

标签: python list


【解决方案1】:

filter()与默认标识函数(None)一起使用:

newlist = filter(None, origlist)

或者,列表推导:

newlist = [el for el in origlist if el]

【讨论】:

  • 谢谢,但你会选择哪一个?
  • @chefsmart:Python 2:filter()。 Python 3:filter() 或列表推导,取决于迭代器是否会做,或者我是否有一个列表。
  • @chefsmart 我会说这是一个有争议的决定,尽管大多数人会支持第二个决定,因为他们认为filter 并不那么清楚。我喜欢第一个。也可以写成filter(bool, origlist)
  • @jamylak:确实; C 代码对Nonebool 的处理方式完全相同,直接调用PyObject_IsTrue
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 2019-02-05
  • 2019-11-02
  • 2022-01-24
  • 1970-01-01
  • 2019-01-29
  • 2021-04-01
  • 2021-07-06
相关资源
最近更新 更多