鱼C论坛

 找回密码
 立即注册
查看: 1530|回复: 8

[已解决]for 循环还能这样用?

[复制链接]
发表于 2022-5-12 22:52:56 | 显示全部楼层 |阅读模式

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

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

x
今天看sorted函数时,发现里面一个示例中for循环的代码很神奇,for在其他语句的后面也可用?能麻烦说明一下什么情况下可以这样使用for循环吗?
s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
stodata = s.split('\n',-1)

# 使用sorted
para = {}

for line in range(len(stodata)):
    # 每一行数据
    data = stodata[line].split(' ')
    print(data)
    # 组装数据结构para={'China': [], 'Russia': []}
    para[data[0]] = [int('-' + i) for i in data[1:]]
# 开始排序(x[1]代表奖牌数目, x[0]代表国家)
new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
print()

c=[]
for i in new_para:
     c.append((i[0]))
for j in range(15):
    print(f"{(j+1):2d}  {c[j]}")
最佳答案
2022-5-13 20:43:57
孜然爱爱 发表于 2022-5-13 20:41
是的,第12行

列表的append方法和for循环的简写
可以百度  列表推导式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-12 22:55:40 | 显示全部楼层
你想表达什么?这不就一普普通通的循环吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 23:06:34 | 显示全部楼层

问题建议还是描述的清晰些哈,你指的 "奇特的" for 循环 是 for i in new_para 吗?

只要是可迭代对象,for 循环就可以进行迭代,即可以填写在 for ... in .... 的 in 后面的位置

因为这里 new_para 变量是被 sorted(...) 函数赋值的, sorted 函数返回的就是一个排序后的列表,列表是可迭代对象,自然可以用 for 循环来进行迭代
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 23:19:13 From FishC Mobile | 显示全部楼层
他可能想问第12行列表推导式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 07:19:43 From FishC Mobile | 显示全部楼层
推导式 sorted(para.items(), key=lambda x: (x[1], x[0])) 中 lambda表达式的意思是,
按照(x[1], x[0])也就是
x[1]代表奖牌数目, x[0]代表国家
排序para.items()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 20:41:35 | 显示全部楼层
qq1151985918 发表于 2022-5-12 23:19
他可能想问第12行列表推导式

是的,第12行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 20:43:57 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
孜然爱爱 发表于 2022-5-13 20:41
是的,第12行

列表的append方法和for循环的简写
可以百度  列表推导式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 20:45:06 | 显示全部楼层
Twilight6 发表于 2022-5-12 23:06
问题建议还是描述的清晰些哈,你指的 "奇特的" for 循环 是 for i in new_para 吗?

只要是可迭代对 ...

不好意思,没有说清楚,是第12行的for循环:para[data[0]] = [int('-' + i) for i in data[1:]]
清楚这里代码的想要做的事,但是不太理解使用条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 20:47:40 | 显示全部楼层
孜然爱爱 发表于 2022-5-13 20:45
不好意思,没有说清楚,是第12行的for循环:para[data[0]] = ]
清楚这里代码的想要做的事,但是不太理解 ...


这是列表推导式,能简化些代码量而已,是否使用都可以的

这里 [int('-' + i) for i in data[1:]] 相当于将每个 值取出后拼接字符串,也就相当于取负值后放入列表中

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 08:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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