Python 如何将贴图对象转换为列表并分配给变量
尽管文档告诉我应该能够使用Python 如何将贴图对象转换为列表并分配给变量,python,python-3.x,Python,Python 3.x,尽管文档告诉我应该能够使用list(map\u object)将map对象转换为list,但这并不是我想要的方式 我有一个简单的程序: n = int(input()) arr = map(int, input().split()) print(list(arr)) #this works list_arr = list(arr) print(list_arr) #doesn't work 我期望: 3 14 23 1 [14, 23, 1] [14, 23, 1] >>>
list(map\u object)
将map对象转换为list,但这并不是我想要的方式
我有一个简单的程序:
n = int(input())
arr = map(int, input().split())
print(list(arr)) #this works
list_arr = list(arr)
print(list_arr) #doesn't work
我期望:
3
14 23 1
[14, 23, 1]
[14, 23, 1]
>>>
但我得到:
3
14 23 1
[14, 23, 1]
[]
有什么想法吗?如评论的
map
是一次性消耗品,因此您可以这样做:
n=int(输入())
arr=map(int,input().split())
列表\u arr=列表(arr)
打印(列表)#这行得通
您可以多次使用列表\u arr
值。一旦:
- 了解Python生成器的工作原理
- 编写/创建自己的生成器
Python 3.6.7(v3.6.7:6ec5cf24b7,2018年10月20日,03:02:14)
[GCC 4.2.1达尔文兼容苹果LLVM 6.0(clang-600.0.57)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>
>>>arr=[1729,67,92]
>>>gen=map(str,arr)
>>>
>>>#第一项
...
>>>下一代
'1729'
>>>
>>>#第2项
...
>>>下一代
'67'
>>>
>>>#第3项
...
>>>下一代
'92'
>>>
>>>#这将不起作用(异常原因是发电机中没有更多项目,结束)
...
>>>下一代
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
停止迭代
>>>
所以,如果你将注意力集中在下面这类例子上,你会感到困惑(第一次)
>arr2=列表(gen)
>>>arr2
['1729', '67', '92']
>>>
>>>#生成器已被迭代,因此没有更多项
...
>>>下一代
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
停止迭代
>>>
>>>arr2=列表(gen)
>>>arr2
[]
>>>
仅供参考,请查看以下链接:
使用它,或者迭代一次,之后迭代器为空,这就是您打印(列表(arr))时发生的情况。
而是将您的list(arr)
分配给一个变量,如list\u arr=list(arr)
,然后您可以在后续代码中使用该变量
In [144]: n = int(input())
3
In [145]: arr = map(int, input().split())
14 23 1
#list_arr can be used for subsequent code, you have consumed arr completely
In [146]: list_arr = list(arr)
In [147]: print(list_arr)
[14, 23, 1]
#Iterator is empty after using it once
In [148]: print(list(arr))
[]
简单地说,您不能这样做:
list\u arr=list(arr)
。因为正如上面的答案所提到的,它已经消耗了
解决此问题的一种方法是,您必须获取每个成员并创建一个新对象。
map
是一次性消耗品。它已在第一次打印中使用,因此其值已用尽。在打印之前,您必须分配一些变量。可能重复感谢Austin&DYZ!是的,效果非常好。您好@arpi我已经尝试总结了我下面回答中评论中出现的任何内容,请看:)相反,这正是我们应该做的:将迭代器转换为列表。
>>> arr2 = list(gen)
>>> arr2
['1729', '67', '92']
>>>
>>> # Generator has already been iterated, so no more items
...
>>> gen.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
>>> arr2 = list(gen)
>>> arr2
[]
>>>
In [144]: n = int(input())
3
In [145]: arr = map(int, input().split())
14 23 1
#list_arr can be used for subsequent code, you have consumed arr completely
In [146]: list_arr = list(arr)
In [147]: print(list_arr)
[14, 23, 1]
#Iterator is empty after using it once
In [148]: print(list(arr))
[]