【发布时间】:2017-11-20 19:07:40
【问题描述】:
有没有更简洁的语法写法?
gen = (i for i in xrange(10))
index = 5
for i, v in enumerate(gen):
if i is index:
return v
生成器应该有一个gen[index] 表达式似乎很自然,它充当一个列表,但在功能上与上述代码相同。
【问题讨论】:
-
在这种情况下(或在许多情况下)你不想要
is。is用于比较身份,而不是平等。你想要==。这可能会在这种情况下起作用,但只是巧合和实现细节。 -
我用的是整数,怎么会不行呢?在这种情况下,期望
index对象实现__eq__甚至是一种好习惯吗? (这离题了……) -
试试
1000 is 500 + 500,它(可能)是False。例如,参见stackoverflow.com/questions/306313/… -
这个问题+1。说“gen 的第 n 个结果”没有更冗长的方式,这似乎很奇怪。
-
另一种可能性是拉链——它们处理任意树,但列表也是一棵树。请参阅此实现github.com/trivio/zipper/blob/master/tests/test_zipper.py