关于python中sort排序的一个简单问题:

最近有小伙伴私聊问了一些类似的问题,就是关于python的sort排序的问题:

a = [1, 0, 4, 0, 2, 3]
a.sort(key=bool)
print(a)

输出结果:
[0, 0, 1, 4, 2, 3]

就是对这个排序的有点不太理解,为什么是[0, 0, 1, 4, 2, 3],不应该按升序来的吗?
之所以产生这个误区,是因为对这个sort理解还不够,我之前也写过一篇关于sort排序的实现,里面简单的阐述原理,并且也实现了demo。
我们再来回到这个问题上:
a.sort(key=bool) 这步可以这样理解:

a = [1, 0, 4, 0, 2, 3]
b = list(map(lambda x: (bool(x), x), a))
b.sort(key=lambda x: x[0])
print(list(map(lambda x: x[1], b)))

这里运用了元组排序对这个进行了隐式转化。
也就是说转成了元组,指定了排序的索引位置,然后再转回来。

原文地址:https://blog.51cto.com/6298641/2485183

时间: 2024-10-06 15:31:19

关于python中sort排序的一个简单问题:的相关文章

Collections中sort()方法源代码的简单分析

Collections的sort方法代码: public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.

工作中关于rpm的一个简单但头疼的问题

工作中关于rpm的一个简单但头疼的问题: 公司有个需要自动化更新rpm包的需求,rpm包名是:tingyun-agent-php-1.0.5-1.x86_64,本来是一个很简单的东西,一行代码就可以实现: for a in `rpm-aq|grep tingyun`;do rpm -e $a;done 但是结果是: [[email protected] scripts]# for a in`rpm -aq|grep tingyun`;do rpm -e $a;done error: packag

Linux内核中的信号机制--一个简单的例子【转】

本文转载自:http://blog.csdn.net/ce123_zhouwei/article/details/8562958 Linux内核中的信号机制--一个简单的例子 Author:ce123(http://blog.csdn.NET/ce123) 信号机制是类UNIX系统中的一种重要的进程间通信手段之一.我们经常使用信号来向一个进程发送一个简短的消息.例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置

完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input("please input a number:"))except ValueError: print("第一个运算数字输入非数字") try: b=int(raw_input("please input another number:"))except Val

python中sort和sorted函数小结

因为作者本人也是刚学python不久,在看python官方文档的时候看到了 Lambda 函数,其中使用sort函数的地方看的有些迷惑,所以就查找了一些关于sort和sorted函数的资料,在此整理到博客 L.sort(cmp=None, key=None, reverse=False) sorted(iterable, cmp=None, key=None, reverse=False) 这样看,sorted函数只比sort函数多一个iterable参数,其余没什么不同,iterable是一个

python中sort()与sorted()的区别

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3, 5, 1, 4, 2] my_list.sort() print (my_list) #输出: [1, 2, 3, 4, 5] 使用sort()方法对list排序会修改list本身,不会返回新list. sort()不能对dict字典进行排序 2.使用sorted()排序 my_list = [

C++中sort排序之自定义排序cmp(入门)

咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数: sort和cmp的实现需要的头文件有: #include<algorithm> using namespace std; sor()是C++标准库中的排序函数,使用很方便,传进去数组的起始和结束地址就行,注意是左闭右开,默认的排序是<,从小到大,不过可以自己写一个cmpare()来自定义,下面缩写cmp()函数.cmp()函数的返回值要是bool,核心之处也是比较,因为sort默认是从小到大,所以在cmp如果还是要从小到大

STL中sort排序算法第三个参数_Compare的实现本质

关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重载运算符和函数对象实现本质上是一样的:两者都是括号运算符的重载. 重载运算符利用了泛型模板,再重载模板中的括号运算福,接着重载里面的大于小于操作符: 而函数对象则是直接针对自己的对象重载括号运算符. 下图是其中一个泛型模板比较函数,位于头文件stl_function.h中. 『注:本文来自博客园“小

洗礼灵魂,修炼python(3)--从一个简单的print代码揭露编码问题,运行原理和语法习惯

前期工作已经准备好后,可以打开IDE编辑器了,你可以选择python自带的IDLE,也可以选择第三方的,这里我使用pycharm--一个专门为python而生的编译器 第一个python代码当然是所有开发语言里入门必学"hello,world",no,你错了,我偏不 第一行是编码,utf-8这是国际使用标准,如果我不加的话,很容易出错 第二行print(打印的意思)语句,是python的关键词语句,可以打印一个字符,可以打印一个数字,可以打印任何你想打印的东西,只要你想让它显示出来,你