孜然爱爱 发表于 2022-5-12 22:52:56

for 循环还能这样用?

今天看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.split(' ')
    print(data)
    # 组装数据结构para={'China': [], 'Russia': []}
    para] = ]
# 开始排序(x代表奖牌数目, x代表国家)
new_para = sorted(para.items(), key=lambda x: (x, x))
print()

c=[]
for i in new_para:
   c.append((i))
for j in range(15):
    print(f"{(j+1):2d}{c}")

isdkz 发表于 2022-5-12 22:55:40

你想表达什么?这不就一普普通通的循环吗?

Twilight6 发表于 2022-5-12 23:06:34


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

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

因为这里 new_para 变量是被 sorted(...) 函数赋值的, sorted 函数返回的就是一个排序后的列表,列表是可迭代对象,自然可以用 for 循环来进行迭代

qq1151985918 发表于 2022-5-12 23:19:13

他可能想问第12行列表推导式

fox2002tv123 发表于 2022-5-13 07:19:43

推导式 sorted(para.items(), key=lambda x: (x, x)) 中 lambda表达式的意思是,
按照(x, x)也就是
x代表奖牌数目, x代表国家
排序para.items()

孜然爱爱 发表于 2022-5-13 20:41:35

qq1151985918 发表于 2022-5-12 23:19
他可能想问第12行列表推导式

是的,第12行

wp231957 发表于 2022-5-13 20:43:57

孜然爱爱 发表于 2022-5-13 20:41
是的,第12行

列表的append方法和for循环的简写
可以百度列表推导式

孜然爱爱 发表于 2022-5-13 20:45:06

Twilight6 发表于 2022-5-12 23:06
问题建议还是描述的清晰些哈,你指的 "奇特的" for 循环 是 for i in new_para 吗?

只要是可迭代对 ...

不好意思,没有说清楚,是第12行的for循环:para] = ]
清楚这里代码的想要做的事,但是不太理解使用条件。

Twilight6 发表于 2022-5-13 20:47:40

孜然爱爱 发表于 2022-5-13 20:45
不好意思,没有说清楚,是第12行的for循环:para] = ]
清楚这里代码的想要做的事,但是不太理解 ...


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

这里 ] 相当于将每个 值取出后拼接字符串,也就相当于取负值后放入列表中

页: [1]
查看完整版本: for 循环还能这样用?