鱼C论坛

 找回密码
 立即注册
查看: 2300|回复: 13

[已解决]求解释此代码

[复制链接]
发表于 2020-4-6 18:31:18 | 显示全部楼层 |阅读模式

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

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

x
  1. [ i for i in range(1, 100) if not(i%3)]
复制代码
最佳答案
2020-4-6 18:33:16
本帖最后由 zltzlt 于 2020-4-6 18:35 编辑

遍历 range(1, 100),如果 i % 3 为 0(表示 i 是 3 的倍数),则将 i 添加进列表里。等价于以下代码:

  1. >>> list1 = []
  2. >>> for i in range(1, 100):
  3.         if not (i % 3):            # 如果 i 是 3 的倍数
  4.                 list1.append(i)    # 将 i 添加进 list1 里

  5.                
  6. >>> list1
  7. [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-6 18:32:43 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-4-6 18:34 编辑

拆开来看:
  1. res = []
  2. for i in range(1, 100):
  3.     if not (i % 3):
  4.         res.append(i)
复制代码

通常,列表推导式的开头是一个变量,
用于放进列表里(和上面代码中的res.append(i)意义相同)
然后就和倒装句一样:
正常版本:
在1到100范围中,如果i无法除以3,则把i放进res列表里
推导式:
把i放进res列表里, 在1到100范围中,如果i无法除以3.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 18:33:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zltzlt 于 2020-4-6 18:35 编辑

遍历 range(1, 100),如果 i % 3 为 0(表示 i 是 3 的倍数),则将 i 添加进列表里。等价于以下代码:

  1. >>> list1 = []
  2. >>> for i in range(1, 100):
  3.         if not (i % 3):            # 如果 i 是 3 的倍数
  4.                 list1.append(i)    # 将 i 添加进 list1 里

  5.                
  6. >>> list1
  7. [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 18:48:33 | 显示全部楼层
zltzlt 发表于 2020-4-6 18:33
遍历 range(1, 100),如果 i % 3 为 0(表示 i 是 3 的倍数),则将 i 添加进列表里。等价于以下代码:

  1. [ i for i in range(1, 100) if not(i%3)]
复制代码

这最前面的 i 有什么用?就是在for前面的那个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 18:49:33 | 显示全部楼层
永远的渣滓 发表于 2020-4-6 18:48
这最前面的 i 有什么用?就是在for前面的那个

是一个变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 18:52:47 | 显示全部楼层

这种语句的语法是什么,能举个例子吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 18:54:01 | 显示全部楼层
永远的渣滓 发表于 2020-4-6 18:52
这种语句的语法是什么,能举个例子吗?
  1. >>> [i for i in range(5)]    # 遍历 range(5),并把它的每一个元素都添加进列表里
  2. [0, 1, 2, 3, 4]
  3. >>> [i for i in range(10) if i > 5]    # 遍历 range(10),它的某一个元素大于 5 就添加进列表里
  4. [6, 7, 8, 9]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 18:56:02 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 19:27:55 | 显示全部楼层

哎,再问一下这个是几元操作?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 19:29:29 | 显示全部楼层
永远的渣滓 发表于 2020-4-6 19:27
哎,再问一下这个是几元操作?

这不是运算符,没有几元的说法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 19:37:24 | 显示全部楼层
zltzlt 发表于 2020-4-6 19:29
这不是运算符,没有几元的说法

我看三元操作符和这个很像
  1. small = x if (x < y and x < z) else (y if y < z else z)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 19:37:38 | 显示全部楼层
永远的渣滓 发表于 2020-4-6 19:37
我看三元操作符和这个很像

确实很像,但不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 19:42:20 | 显示全部楼层
zltzlt 发表于 2020-4-6 19:37
确实很像,但不一样
  1. [i for i in range(5)]
复制代码

的本质其实是
  1. >>> list1=[]
  2. >>> for i in range(5):
  3.         list1.append(i)       
  4. >>> list1
  5. [0, 1, 2, 3, 4]
复制代码
对吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 19:46:53 | 显示全部楼层
永远的渣滓 发表于 2020-4-6 19:42
的本质其实是
对吗?

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 18:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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