python-3.x - 为什么 Python 迭代器只输出奇数或偶数?
问题描述
我在 Python 中使用迭代器时遇到问题。我只想打印数字 1 到 20,但我的代码只给了我奇数或偶数。为什么会出现这种情况?
我也尝试过跟踪它,但我仍然没有得到我期望的答案。
class mynumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
#print(a) for tracking purpose
if(self.a<=20):
x = self.a
self.a +=1
#print('loop1')
return x
else:
#print('loop2')
raise StopIteration
myclass = mynumbers()
myiter = iter(myclass)
for y in myiter:
print(next(myiter))
这个程序打印偶数。如果我将值更改a
为 0,那么它会给出奇数。但我想要所有的数字,比如 1,2,3,...20。
解决方案
在代码中
for y in myiter:
print(next(myiter))
无需调用next()
,这会导致所有其他元素都被跳过。只需使用:
for y in myiter:
print(y)
并next()
在引擎盖下为您调用。
您可以直接使用的一种情况next()
是当您在循环构造之外时:
>>> from itertools import combinations
>>> it = combinations("abcd", 2)
>>> next(it)
('a', 'b')
>>> next(it)
('a', 'c')
>>> # some time later...
... next(it)
('a', 'd')
>>> # some time later, exhaust the rest:
... list(it)
[('b', 'c'), ('b', 'd'), ('c', 'd')]
推荐阅读
- r - 无法在 R 中打开 shapefile
- ibm-mq - 解析 base64 编码的 MQ 消息
- azure - 为什么托管服务标识在我的 MS Azure Web 应用程序中显示为灰色
- javascript - 单击除数字以外的任何内容后重置我的输入框
- python - openstack python api脚本获取SSL错误
- sql - 如何将总和除以计数?
- django - 如何使用 forloop 使得如果满足循环中的“IF”语句,则循环在 Django 模板中结束
- python - ValueError:空词汇
- python - SQL ORDER BY Timestamp,相同的值
- docker - Gitlab-runner + Docker + Windows - 卷规格无效