我正在尝试编写一个函数来返回任意列表中“False”值的索引。我也想用发电机来做这个。你知道吗
我写道:
def cursor(booleanList):
for element in booleanList:
if element is False:
yield booleanList.index(element)
举个例子,我有下面的清单
testList = [True, False, True, False]
然后:
g = cursor(testList)
但是,如果我使用我的代码,我会得到:
> g.next()
1
> g.next()
1
> g.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
而我希望得到:
> g.next()
1
> g.next()
3
> g.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
代码中的问题在哪里?任何帮助都将不胜感激。你知道吗
查看^{} 的文档,它返回值为
x
的第一项的索引。这解释了为什么生成器总是产生1
。你知道吗相反,您可以这样使用^{} :
这是您的索引列表
[0:True, 1:False, 2:True, 3:False]
现在booleanList.index
搜索列表中的第一个False
,并返回当然总是1的索引。你知道吗你错误地认为
for element in booleanList:
以某种方式耗尽了booleanList
,但事实并非如此。你知道吗您需要改用ranged
for
:作为前面答案的扩展,您还可以使用generator expression。诚然,这是一个更为定制的解决方案,但可能适用于您的用例。只是出于好奇,如果你的记忆中已经有了列表,为什么要使用生成器呢?你知道吗
相关问题 更多 >
编程相关推荐