错在哪里,为什么不是大于0排序的呢

错在哪里,为什么不是大于0排序的呢

my_list = [3, 5, -4, -1, 0, -2, -6]
print(sorted(my_list, key=lambda x:x ))
print(sorted(my_list, key=lambda x:x>0 ))

结果第二行为什么会是

[-6, -4, -2, -1, 0, 3, 5]

[-4, -1, 0, -2, -6, 3, 5]


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好!

  1. sorted(my_list, key=lambda x:x>0 )的工作原理是:对my_list列表中的每一个元素计算x>0的结果。对于[3, 5, -4, -1, 0, -2, -6]列表,3>0结果返回True,5>0结果返回True,-4>0结果返False,0>0结果返回False...执行完lambda表达式后返回的列表等价于[True,True,False,False,False,False,]

  2. python3由语言本身保证True转化为int型时总是为1,而False总是为0,则列表又等价于

    [1,1,0,0,0,0]。可以简单将此列表中的数字看成是变量名,第一个1对应原始列表的3,第二个1对应原始列表的5,以此类推。此时sorted函数将对此列表进行排序。结果为[0,0,0,0,1,1]。

  3. 最终的结果是按照[0,0,0,0,1,1]所对应的原始列表中的数返回的,即[-4,-1,0,-2,-6,3,5]。

  4. 另外同学你所说的大于0排序是什么意思,是指按绝对值排序吗?如果是的话写成如下形式:

    sorted(my_list,key = abs).

    如果还有其他问题我们可以再探讨,如果帮到了你望采纳!祝学习愉快

好帮手慕美 2019-06-03 16:30:41

同学,你好,sorted()函数在设置key后会根据key的条件来进行排序。

1、sorted(my_list, key=lambda x:x ):并没有对元素进行设置条件

2、sorted(my_list, key=lambda x:x>0 )会将列表中大于0的元素进行排序。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • sorted(my_list, key=lambda x:x>0 ) [-4, -1, 0, -2, -6, 3, 5] 为什么会是这样的顺序呢
    2019-06-03 16:33:46
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师