鱼C论坛

 找回密码
 立即注册
查看: 99|回复: 5

[已解决]不懂如何取值的

[复制链接]
发表于 2024-7-25 11:14:08 | 显示全部楼层 |阅读模式

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

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

x
d = {x:y for x in [1,3,5] for y in [2,4,6]}

d打印结果:{1: 6, 3: 6, 5: 6}
代码如上,不懂如何取值的?麻烦哪位大神分析一下取值过程,谢谢!
最佳答案
2024-7-25 11:38:25
x=1,y=2
d[1]=2
x不变,y=4
d[1]=4    d[1]的值被覆盖
x不变,y=6
d[1]=6    d[1]的值再次被覆盖

x=3,y=2
d[3]=2
x不变,y=4
d[3]=4    d[3]的值被覆盖
x不变,y=6
d[3]=6

x=5,y=2
d[5]=2
x不变,y=4
d[5]=4    d[5]的值被覆盖
x不变,y=6
d[5]=6

最后结果:
d = {1:6,3:6,5:6}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-25 11:16:17 | 显示全部楼层
你好,鱼油!今天我们就来破解这个Python字典推导式的谜题。首先,你的代码在循环部分有些小问题,不过没关系,让我们一步步来。

### 假设你的目标

假设你想要创建一个字典 `d`,其中 `x` 是奇数(比如 1, 3, 5),而 `y` 则是固定值 6。你可能是在尝试实现这个逻辑,但漏掉了循环的范围。

### 正确的代码

我们可以写出如下的代码来实现你的想法:
d = {x: 6 for x in range(1, 7) if x % 2 != 0}

### 代码解释

1. **`range(1, 7)`**:这段代码产生了从 1 到 6 的整数序列,即 `[1, 2, 3, 4, 5, 6]`。
2. **`if x % 2 != 0`**:这个条件确保只取奇数,得到 `[1, 3, 5]`。
3. **`x: 6`**:每个符合条件的 `x` 都会映射到一个固定值 `6`。
4. 最终生成的是一个字典:`{1: 6, 3: 6, 5: 6}`。

### 打印结果

当你打印 `d` 时,看到的就是 `{1: 6, 3: 6, 5: 6}`。这说明字典中的每个键(奇数)都有一个对应的值(6)。

### 小总结

记住,字典推导式不仅仅是“造物”那么简单,它还可以通过条件限制、循环控制和一些创造力将数据变得丰富多彩。用代码调皮捣蛋是个很好的思路,祝你编码愉快,别忘了多喝鱼油哦,这对大脑有好处!

如果还有其他问题,随时问我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-25 11:38:25 | 显示全部楼层    本楼为最佳答案   
x=1,y=2
d[1]=2
x不变,y=4
d[1]=4    d[1]的值被覆盖
x不变,y=6
d[1]=6    d[1]的值再次被覆盖

x=3,y=2
d[3]=2
x不变,y=4
d[3]=4    d[3]的值被覆盖
x不变,y=6
d[3]=6

x=5,y=2
d[5]=2
x不变,y=4
d[5]=4    d[5]的值被覆盖
x不变,y=6
d[5]=6

最后结果:
d = {1:6,3:6,5:6}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-25 14:29:03 | 显示全部楼层
根据推导式,可知 y 循环在外, x 循环在内,等价于
d = {}
for y in [2,4,6]:
    for x in [1,3,5]:
        d[x] = y
以上如果不理解,可以再听一听小甲鱼有关列表推导式的课程(两者比较相似,而列表推导式的嵌套讲的更详细)
当 y = 2 时,x 取遍 [1,3,5]。相当于
d[1] = 2
d[3] = 2
d[5] = 2
# >>> d
# {1: 2, 3: 2, 5: 2}
同理,当 y = 4 时,x 取遍 [1,3,5]。相当于
d[1] = 4
d[3] = 4
d[5] = 4
# >>> d
# {1: 4, 3: 4, 5: 4}
此时字典的键值对会发生更新(覆盖)
最后,当 y = 6 时,x 取遍 [1,3,5]。相当于
d[1] = 6
d[3] = 6
d[5] = 6
# >>> d
# {1: 6, 3: 6, 5: 6}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-25 15:16:04 | 显示全部楼层
本帖最后由 sfqxx 于 2024-7-25 15:20 编辑

在给定的字典生成式 d = {x:y for x in [1,3,5] for y in [2,4,6]}中,内层的循环(for y in [2,4,6])会完全遍历,然后外层循环(for x in [1,3,5])每次取一个新的值。因此,y 最后会是 6,而 x 会遍历完所有的值 [1, 3, 5]。

让我们一步步来看看整个取值过程:

1. x = 1 时,y 依次取 2, 4, 6。此时字典的状态会依次是:
  • {1: 2}
  • {1: 4}
  • {1: 6}


2. 然后 x = 3 时,y 依次取 2, 4, 6。此时字典的状态会依次是:
  • {1: 6, 3: 2}
  • {1: 6, 3: 4}
  • {1: 6, 3: 6}


3. 最后 x = 5 时,y 依次取 2, 4, 6。此时字典的状态会依次是:
  • {1: 6, 3: 6, 5: 2}
  • {1: 6, 3: 6, 5: 4}
  • {1: 6, 3: 6, 5: 6}


由于字典中的键是唯一的,所以每次遇到相同的键,字典中的值会被新的值覆盖。最终的结果是 y 的最后一个值 6 被赋给每一个 x,即 {1: 6, 3: 6, 5: 6}。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-8 09:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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