- 此问题在此处已有答案**:
Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
2年前关闭。
arr = map(int, input().split())
for i in arr:
print(i)
print(list(arr)[1])
当我运行这段代码并将输入作为,
它给出如下输出,
1
2
3
4
5
Traceback (most recent call last):
File "/home/muyustan/PycharmProjects/openCV/split.py", line 6, in <module>
print(list(arr)[1])
IndexError: list index out of range
然后,
arr = map(int, input().split())
# for i in arr:
# print(i)
print(list(arr)[1])
在注解掉for循环并运行程序和提供相同的输入之后,它在终端给出如下输出:
2
为什么要使用for循环进行更改?
2条答案
按热度按时间hi3rlvi21#
Map函数不返回列表,而是返回迭代器。
一个迭代器只能循环一次。当你写
不做任何操作,你需要调用arr上的next()方法来获得下一个元素,For循环可以完成这个操作。
q5lcpyga2#
如果在异常行之前打印
arr
,您将看到:map-object是一个迭代器(你可以只迭代一次)。
你可以通过使用列表解析来修复你的代码:
或者在对迭代器执行任何操作之前将其转换为列表:
要了解最后一行的内容,请考虑以下重写:
将最后一行更改为
因为
arr = list(mapobj)
用完了迭代器。