【发布时间】:2011-10-29 10:41:03
【问题描述】:
我正在使用生成器在列表中执行搜索,例如这个简单的示例:
>>> a = [1,2,3,4]
>>> (i for i, v in enumerate(a) if v == 4).next()
3
(只是为了举例说明,与上面的列表相比,我使用的列表要长得多,并且条目比int 复杂一点。我这样做是为了整个列表不会'每次我搜索它们时都不会被遍历)
现在,如果我将其改为i == 666,它将返回一个StopIteration,因为它在a 中找不到任何666 条目。
我怎样才能让它返回None?我当然可以将它包装在 try ... except 子句中,但是有没有更 Pythonic 的方式来做到这一点?
【问题讨论】:
-
我能问一下你为什么使用生成器来搜索东西吗?
-
如果你搜索你已经忽略的东西,你期望会发生什么?为什么不直接使用像
if i in a: ...这样更“pythonic”的方式? -
@Manny D,
if i in a如果您想获取找到的项目的索引,则无济于事。 -
@senderle 你可以使用
a.index(i)。你不知道使用enumerate的好处,没错,但我真的明白你为什么要使用生成器来搜索列表。 -
@Manny D,true,但仅适用于定义了
index方法的迭代。此外,如果您想测试除简单相等之外的其他内容(例如,如果您想查找 > 5 的第一项),那么index将无济于事。不过,您是对的,在 c00kiemonster 给出的具体示例中,index是更明智的方法。
标签: python exception generator stopiteration