当前位置: 首页 > news >正文

for in+逻辑表达式 生成迭代对象,最后转化为列表 ——注意list是生成器转化为列表,但[生成器]得到的就是一个列表,其中包含一个生成器元素

(int(digit) ** 2 for digit in str(n))

这个不是 数组(list),而是一个 生成器表达式 (generator expression)

它的作用是:

  • str(n) 把数字 n 转成字符串,例如 n = 82"82"

  • for digit in str(n) 遍历字符串中的每个字符 → "8", "2"

  • int(digit) 把字符转回数字 → 8, 2

  • ** 2 表示平方 → 64, 4

  • 所以,(int(digit) ** 2 for digit in str(n)) 生成的是一个 按需计算的序列(生成器),不会一次性把所有结果存储下来。

但是在代码里写的是:

n = sum(int(digit) ** 2 for digit in str(n))

这里 sum(...)遍历生成器,把里面的每一项加起来,得到一个整数。


🔎 举例:
如果 n = 82

  • str(n)"82"

  • 遍历 "8", "2"

  • 平方得到 64, 4

  • sum(...)64 + 4 = 68

所以,结果是 68


👉 如果你真的想看到“像数组一样的结果”,可以写成 列表推导式

[int(digit) ** 2 for digit in str(n)]

这就会直接生成一个列表,比如:

n = 82
print([int(digit) ** 2 for digit in str(n)])  
# 输出: [64, 4]

要不要我帮你把这段快乐数代码改写成“中间过程都打印出来”的版本?这样你能清楚看到每次 n 的分解结果和平方和的变化。

——【list(生成器)和[生成器]的区别】—

我们一步步分析你的例子:

squares = (x ** 2 for x in range(5))  # 这是一个生成器(generator)
M = [squares]                         # 用 [] 包裹

1️⃣ squares = (x ** 2 for x in range(5))

  • 这里用 小括号 () 创建了一个 生成器(generator)。

  • 它本身 不是列表,而是可以按需生成元素的迭代器。

  • 例如:

print(squares)  # <generator object <genexpr> at 0x...>

2️⃣ M = [squares]

  • 这里用 列表字面量 [] 包裹了 squares

  • M 是一个 列表,长度为 1,里面的唯一元素就是 squares 生成器对象。

print(M)        # [<generator object <genexpr> at 0x...>]
print(type(M))  # <class 'list'>
  • 注意:列表里面的元素仍然是生成器本身,不是生成器产生的数字。


3️⃣ 如果用 list(squares)

squares = (x ** 2 for x in range(5))
M2 = list(squares)
print(M2)        # [0, 1, 4, 9, 16]
print(type(M2))  # <class 'list'>
  • list()遍历生成器,把生成的每个值收集成一个列表

  • 结果是长度 5 的列表 [0,1,4,9,16],而不是长度 1 的列表。


总结:

写法结果类型内容
[squares]list列表里只有生成器对象本身
list(squares)list列表里是生成器生成的所有值

http://www.dtcms.com/a/358882.html

相关文章:

  • HarmonyOS 持久化存储:PersistentStorage 实战指南
  • Kafka面试精讲 Day 2:Topic、Partition与Replica机制
  • Midscene.js:AI驱动的UI自动化测试框架
  • PLSQL Developer 12.0.1 x64 安装步骤详解(附Oracle连接设置|附安装包下载)​
  • SQL 学习
  • 探索 XGBoost 与 LightGBM 的差异:哪个更适合你的项目?
  • 【Pytorch】生成对抗网络实战
  • 快消品牌如何用 DAM 管理万张素材?
  • Coze源码分析-API授权-编辑令牌-后端源码
  • MySQL视图、存储过程与触发器详解
  • 实战指南|解锁 Highcharts 图表导出与数据格式优化
  • windows32位下载谷歌浏览器的地址
  • Git提交信息
  • 不用公网IP也能?cpolar实现Web-Check远程安全检测(1)
  • Qt 窗口 - 3
  • 弱内存模型和强内存模型架构(Weak/Strong Memory Model)
  • stack queue的实现 deque的底层结构 priority_queue的实现
  • easy-http类似feign的轻量级http客户端工具
  • C++三方服务异步拉起
  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • K8s卷机制:数据持久化与共享
  • 当“循环经济”遇上“小程序”,旧物回收正迎来“智慧”升级
  • 奥普新汽车声学测试方案书
  • 谷歌 “Nano Banana“ 深度解析:AI 图像的未来是精准编辑,而非从零生成
  • 构建现代化的“历史上的今天“网站:从API到精美UI的全栈实践
  • jumpserver
  • 字数统计器和文本AI处理,非常好用
  • 【Leetcode】17、电话号码的字母组合
  • MYSQL速通(3/5)
  • Agno - 轻量级Python多智能体系统框架