鱼C论坛

 找回密码
 立即注册
查看: 3593|回复: 12

[已解决]关于for循环的遍历

[复制链接]
发表于 2022-12-9 18:02:54 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lzb1001 于 2022-12-9 18:14 编辑

letters={'g': 1,'o': 2,'d': 1}
for letter in letters.keys():  # 遍历键
          for i in range(letters[letter]): # 遍历值
                     print(letter) # 打印输出字母

g
o
o
d
>>>

不知注解是否正确?

另外,对这种嵌套的for循环遍历不是很理解它的逻辑,所以对它输出或返回的结果不太理解,就是为何会返回上面的结果?
而下面又是这样的结果,越看越晕。




abc={'g': 1,'o': 2,'d': 1}
for a in abc.keys():  # 遍历键
    for i in range(abc[a]): # 遍历值
        print(i) # 打印输出字母

0
0
1
0
>>>

请大神不吝指点。
最佳答案
2022-12-9 18:30:43
letters = {'g': 1,'o': 2,'d': 1}
for letter in letters . keys():      # 遍历键
    for i in range(letters[letter]): # 根据 letters[letter] 的值决定循环次数,例如,当 letter = 'g' 时,letters['g'] = 1,就循环 1 次;当 letter = 'o' 时,letters['o'] = 2,就循环 2 次 
        print(letter)                # 根据 letters[letter] 的值重复打印字母 letter,例如,letters['g'] = 1,'g' 被打印 1 次,letters['o'] = 2,'o' 被打印 2 次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 18:14:54 | 显示全部楼层
这段代码是将 letters 中的每一个键打印(其对应的值)次,比如 'g' 打印 1 次,'o' 打印 2 次,'d' 打印 1次,其中用换行隔开,其内部的循环起到了打印多次同一个键的作用,外部循环起到了遍历值的作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 18:30:43 | 显示全部楼层    本楼为最佳答案   
letters = {'g': 1,'o': 2,'d': 1}
for letter in letters . keys():      # 遍历键
    for i in range(letters[letter]): # 根据 letters[letter] 的值决定循环次数,例如,当 letter = 'g' 时,letters['g'] = 1,就循环 1 次;当 letter = 'o' 时,letters['o'] = 2,就循环 2 次 
        print(letter)                # 根据 letters[letter] 的值重复打印字母 letter,例如,letters['g'] = 1,'g' 被打印 1 次,letters['o'] = 2,'o' 被打印 2 次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 18:39:01 | 显示全部楼层
下面这段代码和结果又如何理解呢?

abc={'g': 1,'o': 2,'d': 1}
for a in abc.keys():  # 遍历键
    for i in range(abc[a]): # 遍历值
        print(i) # 打印输出字母

0
0
1
0
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 19:12:35 | 显示全部楼层
abc={'g': 1,'o': 2,'d': 1}
for a in abc.keys():  # 遍历键
    for i in range(abc[a]): # 遍历值
        print(i) # 打印输出值,你仔细比对两串代码,在这里就不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 21:24:28 | 显示全部楼层
我想打印出单词pneumonia:

letters = {'p':1, 'n':1, 'e':1, 'u':1, 'm':1, 'o':1, 'n':1, 'i':1, 'a':1}

for letter in letters.keys():  # 遍历每个键
    for i in range(letters[letter]): # 定义每个键打印的次数
        print(letter, end='') # 打印输出每个键(即字母)

结果如下:

pneumoia
>>>

对比原单词,少了一个字母n

不知道怎么回事,请大神帮忙看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 21:38:29 | 显示全部楼层
字典的键是唯一的啊,不是你写了两个,就会有两个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 21:39:38 | 显示全部楼层
后面加的键值会覆盖前面的,你在你那个上面,运行一下print(letters )就知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 21:41:25 | 显示全部楼层
gywjj 发表于 2022-12-9 21:39
后面加的键值会覆盖前面的,你在你那个上面,运行一下print(letters )就知道了。

那要怎么修改代码才能打印出完整的单词呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 22:03:06 | 显示全部楼层
本帖最后由 gywjj 于 2022-12-9 22:19 编辑
lzb1001 发表于 2022-12-9 21:41
那要怎么修改代码才能打印出完整的单词呢?


关键是你这个前提就不成立,你不能用字典,用字典,按你这个思路是不行的。字典的KEY只能有一个,除非你把K和V互换一下,用这种方式
abc={'1':'p','2':'n', '3':'e', '4':'u', '5':'m', '6':'o', '7':'n', '8':'i', '9':'a'}
for a in abc.keys():  # 遍历键
    print(abc[a], end='') # 打印输出字母
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 22:07:08 | 显示全部楼层
本帖最后由 lzb1001 于 2022-12-9 22:14 编辑
gywjj 发表于 2022-12-9 22:03
关键是你这个前提就不成立,你不能用字典,用字典,按你这个思路是不行的。字典的KEY只能有一个,除非你 ...


谢谢指点,不过测试发现返回提示错误呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-9 22:46:31 | 显示全部楼层
lzb1001 发表于 2022-12-9 18:39
下面这段代码和结果又如何理解呢?

abc={'g': 1,'o': 2,'d': 1}

abc[g]为1,range(1)里面只有0,输出0,换行
abc[o]为2,range(2)里面只有0和1,输出0,换行,输出1,换行
abc[d]为1,range(1)里面只有0,输出0,over
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-9 23:05:49 | 显示全部楼层
-crash- 发表于 2022-12-9 22:46
abc[g]为1,range(1)里面只有0,输出0,换行
abc[o]为2,range(2)里面只有0和1,输出0,换行,输出1,换 ...

哦,这个懂了,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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