迭代列表的for x in y:
python语法必须记住指针当前所在的元素?当我试图解决这个问题而不诉诸for index, x in enumerate(y):
时,我们如何访问该值
我想这样做的技术原因是,我假设enumerate()
会降低性能,而访问已经存在的“指针”却不会。然而,我从答案中看到,这个指针是相当私密的,无法访问。你知道吗
我之所以要这样做的功能原因是,如果当前元素的浮点值远离“期望的”浮点范围,就可以跳过100个元素。你知道吗
--回答--
解决方法如下(纯图解示例):
# foo is assumed to be ordered in this example
foo = [1,2,3,4,5,6....,99,100]
low = 60
high = 70
z = iter(foo)
for x in z:
if x < low-10
next(islice(z,10,10),None)
if x > high
break
你不能。
for
使用Python iteration protocol,这对于列表意味着它将创建一个私有迭代器对象。该对象跟踪列表中的位置。你知道吗即使要用^{} 显式创建迭代器,当前位置也不是该对象的公共属性:
迭代协议的要点是,它允许您以完全相同的方式处理任何序列,即使是无边界连续的序列。创建一个没有位置的序列生成器非常简单:
当您迭代时,该生成器将在
True
和False
值之间切换。序列中没有位置,所以也没有暴露位置的点。你知道吗只要坚持
enumerate()
。enumerate()
要做的就是保留一个计数器。它在包装的迭代器中根本不保持位置。递增该整数不会消耗太多性能或内存。你知道吗^{} 基本上是这个,implemented in C:
因为它是用C语言实现的,所以在任何一天都不会试图读取原始迭代器上的属性,因为每次迭代都需要更多的字节码操作。你知道吗
此信息是迭代器的内部信息,无法访问。有关iterator protocol的描述,请参见此处。实际上,迭代器的唯一公开成员是
next()
,一旦范围用完,它就会引发StopIteration
异常。你知道吗此外,
enumerate
非常有效。它相当于写作“指针”值是创建迭代器的任何值的内部值。记住,is不需要是一个列表(可以被索引的东西),所以如果你真的想要“索引”,你需要使用enumerate。你知道吗
相关问题 更多 >
编程相关推荐