python列表排序用 sort()和sorted()的区别

目录
  • 1. 是否改变原列表
  • 2.参数设置:key 和 reverse
  • 3.输入数据类型

前言:

内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数。

对列表排序时,既可以用 List.sort(),也可以用 sorted(List),这两个函数有什么不同呢?如何选择?我以前常常分不清这两个函数,等到程序报错了,才知道 sorted 写成 sort 了,List 不能写在 sort() 括号里。您是否也有这个困惑呢?那就一起通过例子来熟悉这两个函数吧,以后就知道应该怎么使用了。

1. 是否改变原列表

首先应用 List.sort() 对列表排序,

代码示例如下:

letters=['a','dc','ab','D']
print('before sort: letters:',letters)
result1=letters.sort()
print('after sort: result1:',result1)
print('after sort: letters:',letters)

运行结果为:

before sort: letters: ['a', 'dc', 'ab', 'D']
after sort: result1: None
after sort: letters: ['D', 'a', 'ab', 'dc']

可以看到,List.sort() 没有返回值,而是直接改变了原列表。这既是优点也是缺点。说它是优点呢,有时不需要再使用原列表,直接修改原列表可以节约内存空间,尤其当这个列表很大时。而它的缺点也正是因为改了原列表,新手在程序设计时容易忽视这一点,在后续程序中错误地操作列表,导致得不到预计的结果。

再来看一下应用 sorted(List) 对列表排序的效果,

代码示例如下:

letters=['a','dc','ab','D']
print('before sorted: letters:',letters)
result2=sorted(letters)
print('after sorted: result2:',result2)
print('after sorted: letters:',letters)

运行结果为:

before sorted: letters: ['a', 'dc', 'ab', 'D']
after sorted: result2: ['D', 'a', 'ab', 'dc']
after sorted: letters: ['a', 'dc', 'ab', 'D']

可以看到,sorted(List) 返回一个排序好的新列表,原列表不变。

依据上述对比,在选择排序函数时,我们需要考虑两点:

  • 1.是否希望改变原列表,如果是,选择 sort()。如果原列表不能修改,选择 sorted()。
  • 2.注意使用函数的返回值,或者说排序好的列表存在哪里。比如代码为 list2=list1.sort() 或者 function(list1.sort()),那么 list2 其实是 None,而不是排序好的列表。同理,function() 函数的输入也是 None。list1 才是排序好的列表。

2.参数设置:key 和 reverse

看上面例子中列表 letters 的排序结果,发现 D 居然排在 a 的前面?这是因为 ASCII 码中大写英文字母排在小写英文字母的前面。那么,如果我们想实现按字母顺序,不区分大小写的排序,应该怎么办呢?

方法:可以设置 key 参数,对 sort() 和 sorted() 都适用。

比如:设置key=str.lower,就是按字符的小写字母形式排序。

代码示例如下:

letters=['a','dc','ab','D']
letters.sort(key=str.lower)
print(letters)

运行结果为:

['a', 'ab', 'D', 'dc']

此外,默认是按升序排列。也可以设置reverse=True,就是按降序排列。这一参数同样是对 sort() 和 sorted() 都适用。下面的代码示例同时设置了 key 和 reverse 参数。

letters=['a','dc','ab','D']
result=sorted(letters,key=str.lower,reverse=True)
print(result)

运行结果为:

['dc', 'D', 'ab', 'a']

3.输入数据类型

List.sort() 是列表对象(object)的一个方法(method),因此只能用于列表。

sorted() 函数是 Python 语言的内置函数,可以用于 iterables,包括 列表(List),元组(Tuple),字典(Dict)等等。iterable 对象有一个特点,就是可以用在循环 for 语句中(例如上面例子的列表 letters,可以用在 for 语句中:for e in letters:)。

下面我们来看看不同数据类型应用 sorted() 函数的例子。需要注意的是,虽然 sorted() 的输入可以有多种类型,但是输出都是排序好的列表。

输入为元组(Tuple)时:

letters=('a','dc','ab','D')
result=sorted(letters)
print(result)

运行结果为:

['D', 'a', 'ab', 'dc']

输入为字符串(Str)时:

letters='dasf'
result=sorted(letters)
print(result)

运行结果为:

['a', 'd', 'f', 's']

从结果可以看出,输入为字符串时,输出为排序好的字符列表,单个字符为列表的一个元素。

输入为字典(Dict)时:

letters={'b':1,'a':3,'d':2,'c':1}
result=sorted(letters)
print(result)

运行结果为:

['a', 'b', 'c', 'd']

从结果可以看出,sorted() 函数输出的结果是对letters.key() 排序得到的列表。

参考:https://docs.python.org/3/howto/sorting.html

到此这篇关于python列表排序用 sort()和sorted()的区别的文章就介绍到这了,更多相关python列表排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 超详细讲解对象的构造及初始化

    目录 如何初始化对象 构造方法 特性 默认初始化 就地初始化 如何初始化对象 我们知道再Java方法内部定义一个局部变量的时候,必须要初始化,否则就会编译失败 要让这串代码通过编译,很简单,只需要在正式使用a之前,给a设置一个初始值就好那么对于创造好的对象来说,我们也要进行相对应的初始化我们先写一个Mydate的类 public class MyDate { public int year; public int month; public int day; /** * 设置日期: */ pub

  • python列表排序用 sort()和sorted()的区别

    目录 1. 是否改变原列表 2.参数设置:key 和 reverse 3.输入数据类型 前言: 内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数. 对列表排序时,既可以用 List.sort(),也可以用 sorted(List),这两个函数有什么不同呢?如何选择?我以前常常分不清这两个函数,等到程序报错了,才知道 sorted 写成 sort 了,List 不能写在 sort() 括号里.您是否也有这个困惑呢?那就一起通

  • python列表排序用 sort()和sorted()的区别

    目录 1. 是否改变原列表 2.参数设置:key 和 reverse 3.输入数据类型 前言: 内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数. 对列表排序时,既可以用 List.sort(),也可以用 sorted(List),这两个函数有什么不同呢?如何选择?我以前常常分不清这两个函数,等到程序报错了,才知道 sorted 写成 sort 了,List 不能写在 sort() 括号里.您是否也有这个困惑呢?那就一起通

  • Python列表排序 list.sort方法和内置函数sorted用法

    很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别. 一.list.sort方法 list.sort方法会就地排序列表,也就是说不会把原列表复制一份.这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表. 在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那

  • python排序函数sort()与sorted()的区别

    python 中sorted与sort有什么区别 sort(cmp=None, key=None, reverse=False) sorted(iterable, cmp=None, key=None, reverse=False) sort是容器的函数,用List的成员函数sort进行排序 sorted是Python的内建函数相同的参数,用built-in函数sorted进行排序 sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均

  • Python列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有3个: reverse反转/倒序排序 sort正序排序 sorted可以获取排序后的列表 在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排

  • 深入理解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 = [

  • python数组排序方法之sort、sorted和argsort详解

    目录 引言 sort和sorted的区别如下 用法实例 1.升序排序 2.降序排序 3.如果不想要排序后的值,想要排序后的索引,可以这样做 4.字符串类型排序 5.二维数组排序 6.二维数组获取排序后的索引 7.字典数组排序 8.字典数组获取排序后的索引 9.对象排序 10.对象排序获取排序后的索引 11.一维数组排序[numpy] 12.一维数组获取排序后的索引[numpy] 13.一维数组降序排序[numpy] 14.二维数组排序[numpy] 15.二维数组获取排序后的索引[numpy]

  • python列表操作之extend和append的区别实例分析

    本文实例讲述了python列表操作之extend和append的区别.分享给大家供大家参考.具体如下: li = ['a', 'b', 'c'] li.extend(['d', 'e', 'f']) print li print len(li) print li[-1] li = ['a', 'b', 'c'] li.append(['d', 'e', 'f']) print li print len(li) print li[-1] 运行结果如下: ['a', 'b', 'c', 'd', '

  • Python 列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序

  • python中sort()和sorted()的区别及用法实例

    目录 一. 二. python中输入字符串转列表的注意问题 总结 本文主要讲sort与sorted的主要区别,以便正确使用 一. sort()只能用于列表:sorted()可以用于所有可迭代对象: 比如: str_a = "blue" print(sorted(str_a)) >>>['b', 'e', 'l', 'u'] 二. sort()对列表排序是进行原处排序,并不会返回新的列表: sorted()排序后会返回一个新的列表: 比如: 对于sort()来说: li

随机推荐