【发布时间】:2013-01-21 04:46:18
【问题描述】:
我正在寻找一种方法来轻松确定列表中的所有 not None 项目是否都出现在单个连续切片中。我将使用整数作为 not None 项目的示例。
例如,列表[None, None, 1, 2, 3, None, None] 满足我对连续整数条目的要求。相比之下,[1, 2, None, None, 3, None] 是不连续的,因为整数之间有 None 条目。
再举一些例子来说明这一点。
连续:[1, 2, 3, None, None][None, None, 1, 2, 3][None, 1, 2, 3, None]
不连续:[None, 1, None, 2, None, 3][None, None, 1, None, 2, 3][1, 2, None, 3, None, None]
我的第一个方法是使用变量来跟踪我们是否遇到过None,以及我们是否遇到过int——这最终会得到一个高度嵌套的和很难遵循嵌入在 for 循环中的一系列 if/else 语句。 (除了丑陋之外,我承认我并没有让它在所有情况下都能正常工作)。
有谁知道一种更简单的方法来确定列表中的非无项是否出现在单个连续切片中?
【问题讨论】:
-
对于 None (
[None, None, None, None]) 序列,您希望得到什么结果? -
对于一般问题,这是一个重要的问题,但对于我的具体需求,
[None, None, None]是否确定为连续并不重要。我实际上在做的是抓取第一组 not None 项目,然后用它们做一些事情——我所做的究竟是什么取决于它是否是唯一的连续切片。所以——所有的 None 甚至都不会让我进入这个过程的第一步。但是,理论上,它应该可能返回 True,对吧? -
如果保证列表至少包含一个非无项目,请将其编辑到问题中。那么列表长度为零
[]或无的情况呢?它应该给出 True、False、None、引发异常还是你完全不在乎?为简单起见,我们不妨(复古)根据最符合 Pythonic 的内容来定义不关心行为。 -
顺便说一句,合适的词是“连续”而不是“连续”。
-
[3, 1, 2, None, None]需要什么结果?