python列表排序
1.贴题
给你一个列表 L, 对L进行升序排序并输出排序后的列表。
例如:L = [8,2,50,3]
则输出:[2,3,8,50]
原题地址
http://www.pythontip.com/coding/code_oj_case/2
2.说明
有一个列表,列表里面有一些元素,例中为数字(int型),当然也有可能为字符型或者bool型,还有可能是混合型(python的列表支持混合类型)
3.参考代码
4.调试代码
5.输出结果
[2, 3, 8, 50]['a', 'b', 'c', 'd']Traceback (most recent call last):File "jdoodle.py", line 12, inL.sort()TypeError: '
前两个是可以正常排序并输出的,但是最后一个报错因为不同类型无法比较。
所以如果是混合型列表的话只能先通过条件操作取出同类型的元素生成新列表再进行排序操作。
当然此题不用考虑那么多所以就现在的代码就可以了。
6.其他解法
7.解说
解排序问题一般有两个思路,一个是直接利用别人写好的函数或者针对某个类型的性质,另一个是自己写算法从头开始做。
在这道题中直接可以利用的函数有两个,一个是list.sort(),另一个是sorted(list)。区别是:
前一个将列表排完序就完了,没有然后了,也就是说它不生成新的列表,而是直接操作原列表,所以如果你要保留原列表不能使用,另外也不可以直接print(list.sort()),因为它没有返回值。
后一个将列表排序后原列表(下面代码中M)没有发生变化,它只是生成一个新的列表(可以直接打印输出),而新的列表里的元素是排好了序的,有返回值,返回值为新列表。
看代码
看结果
[2,3,8,50]
[2,3,8,50]
[8,2,50,3]
可以看到M经过sorted()之后M列表还是原来的列表,没有变化。
自己从头写算法也是可以的,比如说上面其他解法中的第二种就使用了冒泡排序法(相邻的两个元素比较大小后决定交换还是不交换,算法的复杂度为O(n^2))
碎碎念
微信公众号的排版占据了一半的时间orz
小白真的要好好努力了,等有时间了(又是这句话→__→)要用html做个模板出来(但愿吧)
列表排序用到的两个函数之前一直搞不清楚呢,这下要好好记住!
领取专属 10元无门槛券
私享最新 技术干货