python一行找出猪队友
>>> members = {"鱼C工作室" : {"小甲鱼":83, "不二如是":89, "二师兄":64, "小师妹":75, "鱼小二":96},
"复仇者联盟" : {"钢铁侠":85, "绿巨人":39, "黑寡妇":82, "鹰眼":73, "雷神":99},
"奥特曼家族" : {"迪迦":99, "艾斯":84, "泰罗":63, "佐菲":78, "赛文":78}}
>>>
>>> # 请在此处添加一行代码,完成题目要求,并将结果保存在变量 x 中
>>>
>>> print(x)
['鱼C工作室:二师兄', '复仇者联盟:绿巨人', '奥特曼家族:泰罗']
答案:
x = [':'.join((i, min(members.items(), key = lambda x:x))) for i in members]
>>> for i in members:
... min(members.items(), key = lambda x:x)
...
('二师兄', 64)
('绿巨人', 39)
('泰罗', 63)
不是很懂,不过我大概能猜测是通过key的大小来进行排列的,不过min()为什么会返回一列,不应该返回最小的吗,还有我不是很理解这里lambda x:x,这里的x指的是前面的吗,为什么呢,不是很清楚语法~~
希望大佬们能指点一下{:10_266:} 所以题目是什么 hrpzcf 发表于 2022-7-6 16:34
所以题目是什么
就是打印出三组中分数最低的 members = {
"鱼C工作室" : {"小甲鱼":83, "不二如是":89, "二师兄":64, "小师妹":75, "鱼小二":96},
"复仇者联盟" : {"钢铁侠":85, "绿巨人":39, "黑寡妇":82, "鹰眼":73, "雷神":99},
"奥特曼家族" : {"迪迦":99, "艾斯":84, "泰罗":63, "佐菲":78, "赛文":78}}
res = ) for each in members.values()]
print(res) 本帖最后由 hrpzcf 于 2022-7-6 23:25 编辑
hello? 发表于 2022-7-6 19:44
就是打印出三组中分数最低的
因为 min 函数支持 min(iterable, key) 这样的调用方式,iterable 是可迭代对象,key 是一个函数,是排序方法。
在你的题目中 iterable 参数,即 xxx.items() 的值是类似这样的 [ (10, 1), (5, 5), (3, 3) ... ],
如果不传key参数,min不知道该怎么在 [ (10, 1), (5, 5), (3, 3) ] 这些东西中取最小值,
而传入key 参数后(key = lambda x:x),就是告诉 min,应该以 [ (10, 1), (5, 5), (3, 3) ] 这东西的每个元组的第二项的值来比较大小,min 一看 (10, 1) 的第二项 1 在其他元组的第二项中是最小的,所以就返回 (10, 1) 了 hrpzcf 发表于 2022-7-6 23:24
因为 min 函数支持 min(iterable, key) 这样的调用方式,iterable 是可迭代对象,key 是一个函数,是排 ...
不过min(members.items(), key = lambda x:x)的返回值是将这些二元组按第二个参数进行从小到大返回,而不是只返回最小的那个 本帖最后由 hrpzcf 于 2022-7-7 12:59 编辑
hello? 发表于 2022-7-7 09:59
不过min(members.items(), key = lambda x:x)的返回值是将这些二元组按第二个参数进行从小到大返回, ...
是members.items()不是members.items()
一步一步解释一下下面这个代码:
for i in members:
min(members.items(), key = lambda x:x)
这个循环会执行 3 次 min 函数:
min(members["鱼C工作室"].items(), key = lambda x:x)
min(members["复仇者联盟"].items(), key = lambda x:x)
min(members["奥特曼家族"].items(), key = lambda x:x)
第一次:min(members["鱼C工作室"].items(), key = lambda x:x)
members["鱼C工作室"]的值就是{"小甲鱼": 83, "不二如是": 89, "二师兄": 64, "小师妹": 75, "鱼小二": 96}
members["鱼C工作室"].items()的值虽然不是列表,但是类似 [('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)]
也就是说要取出[('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)]中的最小值,
即 min([('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)])
但是 min 不知道哪个是最小的,('小甲鱼', 83) 最小?还是 ('二师兄', 64) 最小?还是 ('小师妹', 75) 最小?min 不知道
这时候我们给 min 传入 key 参数: lambda x:x ,告诉 min 按照lambda x:x 比较 ('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96) 这几个的大小,
lambda x:x 是什么?lambda x:x 可以看成def func(x):
return x
min 会分别把 [('小甲鱼', 83), ('不二如是', 89), ('二师兄', 64), ('小师妹', 75), ('鱼小二', 96)] 里的每一项 x 传入 func 函数,得到每一项的 x 即每一项的第 2 个值:83, 89, 64, 75, 96
然后比较得出结果:第三项的第二个值:64 最小,所以 min 返回第三项 ('二师兄', 64)。
剩下的 members["复仇者联盟"] 和 members["奥特曼家族"] 同理。
所以 min(members["鱼C工作室"].items(), key = lambda x:x) 只返回了一项 ('二师兄', 64),你为什么会觉得 min 是从小到大返回所有的项呢?
hrpzcf 发表于 2022-7-7 12:56
是不是
一步一步解释一下下面这个代码:
懂了谢谢大佬,之前确实看错了,现在明白了{:10_266:}
页:
[1]