映射 Python 3 vs Python 2
map in Python 3 vs Python 2
我是 Python 新手,正在阅读一本 Python 旧书。它基于 Python 2,所以有时我对细节有点困惑。
有密码
L=map(lambda x:2**x, range(7))
所以 return python 3 中的列表不存在,我用谷歌搜索发现 list(L
) 有效。
但问题是,首先 list(L)
工作正常,
但是当我再次使用它时,
list(L)
list(L)
第二个 returns [ ]
有人可以向我解释发生了什么吗?
map
returns 一个迭代器。因此,它的输出只能使用一次。如果您希望将结果存储在列表中,与 Python 2.x 相同,只需在使用 map
:
时调用 list
L = list(map(lambda x:2**x, range(7)))
列表 L
现在将包含您的结果,无论您调用多少次。
您面临的问题是,一旦 map
迭代一次,它将不会为后续的每次调用产生任何结果。因此,您会看到第二次调用的空列表。
如果您无法耗尽迭代器但希望使用它两次,有关变通方法的更详细解释和建议,请参阅 Why can't I iterate twice over the same data。
Python 3.x returns 生成器对象:
$ python3 -c "print(map(lambda x: 2**x, range(7)))"
<map object at 0x104203208>
您可以使用 list()
提取这些值,但生成器可能会耗尽。因此,后续使用 list()
将导致空 []
,因为没有更多值可通过 next()
调用访问。我建议稍微尝试一下生成器,或者在这里 https://wiki.python.org/moin/Generators 阅读一些内容。希望这有帮助
我是 Python 新手,正在阅读一本 Python 旧书。它基于 Python 2,所以有时我对细节有点困惑。
有密码
L=map(lambda x:2**x, range(7))
所以 return python 3 中的列表不存在,我用谷歌搜索发现 list(L
) 有效。
但问题是,首先 list(L)
工作正常,
但是当我再次使用它时,
list(L)
list(L)
第二个 returns [ ]
有人可以向我解释发生了什么吗?
map
returns 一个迭代器。因此,它的输出只能使用一次。如果您希望将结果存储在列表中,与 Python 2.x 相同,只需在使用 map
:
list
L = list(map(lambda x:2**x, range(7)))
列表 L
现在将包含您的结果,无论您调用多少次。
您面临的问题是,一旦 map
迭代一次,它将不会为后续的每次调用产生任何结果。因此,您会看到第二次调用的空列表。
如果您无法耗尽迭代器但希望使用它两次,有关变通方法的更详细解释和建议,请参阅 Why can't I iterate twice over the same data。
Python 3.x returns 生成器对象:
$ python3 -c "print(map(lambda x: 2**x, range(7)))"
<map object at 0x104203208>
您可以使用 list()
提取这些值,但生成器可能会耗尽。因此,后续使用 list()
将导致空 []
,因为没有更多值可通过 next()
调用访问。我建议稍微尝试一下生成器,或者在这里 https://wiki.python.org/moin/Generators 阅读一些内容。希望这有帮助