鱼C论坛

 找回密码
 立即注册
查看: 131|回复: 2

[已解决]B站36讲map函数问题

[复制链接]
发表于 2024-7-29 09:29:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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

   
70
105
115
104
67
>>> list(mapped)
[]
最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-29 09:40:00 | 显示全部楼层
FishC 发表于 2024-7-29 09:30
哈哈,看来你在探索 Python 中 `map` 函数的奥秘呀!我这就为你解惑。

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

我明白了。之所以是空的原因是迭代器是一次性的,对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 20:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表