尽管文档告诉我,我应该能够使用list(map_object)
将地图对象转换为列表,但这并不符合我想要的方式。
我有一个简单的程序:
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]
[]
有什么想法吗?
答案 0 :(得分:2)
正如评论中已经提到的,map为您提供了一个迭代器,您只能consume
或迭代一次,之后迭代器为空,这就是您{{ 1}}
相反,将print(list(arr))
分配给变量,例如list(arr)
,然后可以在后续代码中使用它
list_arr = list(arr)
答案 1 :(得分:0)
评论map
是一次性消耗品,因此您可以执行以下操作:
n = int(input())
arr = map(int, input().split())
list_arr = list(arr)
print(list_arr) #this works
您可以多次使用list_arr
值。
答案 2 :(得分:-1)
一旦您愿意
了解/了解Python生成器如何工作;
编写/创建自己的生成器。
您将轻松找出此问题(看起来很奇怪,但非常有用和简单)。
感谢 yield 关键字和 StopIteration 异常以及一些魔术方法,因为这些方法在编写我们自己的生成器中发挥了重要作用。
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 03:02:14)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> arr = [1729, 67, 92]
>>> gen = map(str, arr)
>>>
>>> # 1st item
...
>>> gen.__next__()
'1729'
>>>
>>> # 2nd item
...
>>> gen.__next__()
'67'
>>>
>>> # 3rd item
...
>>> gen.__next__()
'92'
>>>
>>> # This will not work (Exception beacause no more items are in generator, over)
...
>>> gen.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
因此,如果您专注于以下示例,则会感到困惑(第一次)。
>>> 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
[]
>>>
仅供参考,请查看以下链接:
答案 3 :(得分:-2)
简而言之,您不能喜欢: delete(employee: Employee): Observable<Employee> {
const id = typeof employee === 'number' ? employee : employee.id;
console.log(id);
const url = `${this.employeesUrl}/${id}`;
console.log(url);
return this.http.delete<Employee>(url, httpOptions)
.pipe(tap(_ => console.log(`deleted employee id=${id}`)),
catchError(this.handleError<Employee>('deleteEmployee'))
);
}
。因为如以上答案所述,它已经消耗了。
解决此问题的一种方法,那么您必须获取每个成员并创建一个新对象。