鱼C论坛

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

[已解决]好像是惰性函数?以及列表排序问题

[复制链接]
发表于 2019-7-31 11:58:59 | 显示全部楼层 |阅读模式

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

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

x
在菜鸟教程中看到这样一种排序方法:
  1. # 获取列表的第二个元素
  2. def takeSecond(elem):
  3.     return elem[1]

  4. # 列表
  5. random = [(2, 2), (3, 4), (4, 1), (1, 3)]

  6. # 指定第二个元素排序
  7. random.sort(key=takeSecond)
复制代码
对于其中def takeSecond(elem)的用法不是很理解,请教下这个应该去补哪一块的内容呢?

是否有不使用def,也能达到此种排序目的方法呢?

最佳答案
2019-7-31 15:11:19
FC的注册很坑 发表于 2019-7-31 14:22
匿名函数的方法可以理解类比其他的匿名函数用法理解,但还是不明白takeSecond函数,不明白的地方在于key= ...

https://www.liaoxuefeng.com/wiki ... 00/1017328655674400
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-31 12:24:13 | 显示全部楼层
去学习函数定义,索引,不明白有什么不理解的,
你还可以使用匿名函数,但是我估计你更不理解了。
  1. # 列表
  2. random = [(2, 2), (3, 4), (4, 1), (1, 3)]

  3. # 指定第二个元素排序
  4. random.sort(key=lambda s: s[1])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-31 14:02:12 From FishC Mobile | 显示全部楼层
也可以用 lambda 匿名函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-31 14:03:28 From FishC Mobile | 显示全部楼层
takeSecond函数是按照列表中的元组中的第二个元素排列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-31 14:22:30 | 显示全部楼层
zltzlt 发表于 2019-7-31 14:03
takeSecond函数是按照列表中的元组中的第二个元素排列

匿名函数的方法可以理解类比其他的匿名函数用法理解,但还是不明白takeSecond函数,不明白的地方在于key=takeSecond是没有传参的,而定义中有个elem参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-31 14:24:22 | 显示全部楼层
FC的注册很坑 发表于 2019-7-31 14:22
匿名函数的方法可以理解类比其他的匿名函数用法理解,但还是不明白takeSecond函数,不明白的地方在于key= ...

默认把前面的对象每个元素迭代给sort函数,这是列表的内置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-31 15:11:19 | 显示全部楼层    本楼为最佳答案   
FC的注册很坑 发表于 2019-7-31 14:22
匿名函数的方法可以理解类比其他的匿名函数用法理解,但还是不明白takeSecond函数,不明白的地方在于key= ...

https://www.liaoxuefeng.com/wiki ... 00/1017328655674400
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-31 17:08:44 | 显示全部楼层
FC的注册很坑 发表于 2019-7-31 14:22
匿名函数的方法可以理解类比其他的匿名函数用法理解,但还是不明白takeSecond函数,不明白的地方在于key= ...

sort会把每一项的第二项传入,然后按传回的数据进行排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-5 21:50:57 | 显示全部楼层
自己上来填坑:
若有def func(i):
key=func
执行key(i)就相当于执行func(i),类似于key(i)的执行语句应该是被藏在sort函数里了,而且参数i与list有关。所以func是有传参数的,只不过表面上看不到。以下面的代码举例:

  1. class A():
  2.     def __init__(self, a):
  3.         self.li = a
  4.     def s(self,key):
  5.         T=[]
  6.         for i in self.li:
  7.             T.append(key(i))
  8.         print(T)

  9. def func(a):
  10.     return a[1]

  11. a = A([(1,2),(3,1),(2,1)])
  12. a.s(key=func)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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