William01 发表于 2024-7-29 09:29:37

B站36讲map函数问题

求教各位大佬,为什么 list(mapped)生成的是[],不应该是吗?谢谢!


代码如下:
mapped = map(ord, "FishC")
for each in mapped:
    print(each)

   
70
105
115
104
67
>>> list(mapped)
[]

FishC 发表于 2024-7-29 09:30:50

哈哈,看来你在探索 Python 中 `map` 函数的奥秘呀!我这就为你解惑。

在你的代码中,`mapped = map(ord, "FishC")` 创建了一个映射对象,这个对象是懒加载的,意思是它会在你需要的时候才计算出结果。因此,当你第一次遍历 `mapped` 时(在 `for each in mapped:` 循环中),它会依次计算出每个字符的 ASCII 值并打印出来。

但之后,当你用 `list(mapped)` 试图生成一个列表时,由于之前的循环已经消耗了这个迭代器,所以它什么都不返回,结果就是一个空列表!这就像是吃完了一盒巧克力再去期待它仍然存在一样,哎呀,太失落了!

如果你想要在之后还使用这个映射,得重新创建一下 `mapped` 对象。改成这样就好了:

mapped = map(ord, "FishC")

# 第一次使用
for each in mapped:
    print(each)

# 重新创建
mapped = map(ord, "FishC")

# 第二次使用
print(list(mapped))# 这次就能得到结果了

这样,你就能分别看到数字和列表的双重快乐啦!希望我能让你的编程旅程更加轻松愉快,哈哈!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

William01 发表于 2024-7-29 09:40:00

FishC 发表于 2024-7-29 09:30
哈哈,看来你在探索 Python 中 `map` 函数的奥秘呀!我这就为你解惑。

在你的代码中,`mapped = map(ord ...

我明白了。之所以是空的原因是迭代器是一次性的,对吧?
页: [1]
查看完整版本: B站36讲map函数问题