Help on built-in function sorted in module __builtin__:
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
sort(...)
Help on built-in function sort:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
sorted与sort的区别
1.
sorted函数是内建函数,而sort是序列的内部函数,所以它们调用方式不一样,另外sorted函数多了一个系列迭代器参数
2. sorted函数不改变参数系列,但是返回排好序的序列副本;而sort作为序列的内部函数,调用完后会对调用的序列进行排序
下面的结果很好的说明了这些:
>>> list=[2,1]
>>> x=sorted(list)
[1, 2]
[2, 1]
>>> y=list.sort()
[1, 2]
sorted与sort的参数
sorted与sort除了一个是序列作为参数,一个是序列调用该函数,其他参数几乎完全一致,下面逐一来介绍其用法及效果:
1. 默认用法
由于sort函数的参数reverse,key,cmp都提供了缺省参数,所以我们可以直接不指定这些参数值调用该函数。但是它必须有一个前提,就是list中存放的类型是可比较的。否则就会弹出错误“Type Error: unorderable type"。
2. reverse参数
当取值为True时候就是倒序排,默认为False正序从小到大排
>>> list.sort(reverse=False)
[1, 2]
>>> list.sort(reverse=True)
[2, 1]
3. key参数
key表示用来做比较的值,这个主要对自定义的数据类型有用。下面用一个例子来诠释:
# Definition for an interval.
class Interval:
def __init__(self, s=0, e=0):
self.start = s
self.end = e
# Initialize the Interval list
list = []
for i in range(10,7,-1):
for j in range(11,i,-1):
list.append(Interval(i,j))
这里我们定义了Interval为[s,e]的数据结构并且初始化了。对于这个问题,显然我们用缺省的参数来调用会出错,因为我们没有提供可比较的函数来比较类型Interval。对于这样的情况,我们就可以指定比较的key来解决。
#Sort the Interval list
list2 = sorted(list,key=lambda x:x.start)
#Output the Interval list
for x in list:
print("[%d,%d]"%(x.start,x.end))
for x in list2:
print("[%d,%d]"%(x.start,x.end))
这里我们基于Interval.start作为key进行排序了。
#Sort the Interval list based on Interval.start and Interval.end
list2 = sorted(list,key=lambda x:(x.start,x.end))
我们用元祖(Interval.start,Interval.end)作为key来比较,而元祖有默认的cmp函数。这就达到了目标。
4. cmp参数
我们可以通过自定义函数或则使用简洁的lambda来作为参数传给cmp
#Sort the Interval list based on Interval.start and Interval.end
def cmpInterval(a, b):
if a.start != b.start:
return cmp(a.start,b.start)
return cmp(a.end,b.end)
list1 = sorted(list,cmp = cmpInterval)
list2 = sorted(list,cmp = lambda x,y:cmp(x.start,y.start))
不过比较遗憾的是发现在python 3.x中传入cmp函数会出现一个错误:
TypeError: 'cmp' is an invalid keyword argument for this function
这时候我们就需要使用key来绕过这个问题。另外一个建议就是我们尽量使用key而不是cmp来排序以提高运行速度。
sorted(...)Help on built-in function sorted in module __builtin__:sorted(...) sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted listsort(...)Help on built-in function sor
pandas是
python
环境下最有名的数据统计包,而DataFrame翻译为数据框,是一种数据组织方式,这么说你可能无法从感性上认识它,举个例子,你大概用过Excel,而它也是一种数据组织和呈现的方式,简单说就是表格,而在在pandas
中
用DataFrame组织数据,如果你不print DataFrame,你看不到这些数据。
首先,是想用pandas操作“.csv"文件,当然有很多操作,用di...
Python
内置array数组有
sort
()
函数
可以对数组进行排序,将参数reverse值修改为True为降序排列
x = [2, 4, 6, 8, 3, 1]
x.
sort
() # [1, 2, 3, 4, 6, 8]
x.
sort
(reverse=True) # [8, 6, 4, 3, 2, 1]
但是在Numpy数组
中
并没有reverse此参数
TypeError: 'reverse' is an invalid keyword argument for
sort
()
于是采用下面的写法
在学习《利用
Python
进行数据分析》一书时出现
TypeError:
sort
_index() got an unexpect
ed
keyword argument ‘by’
问题原因分析:pandas模块更新了,对有些方法进行重写,参数发生改变。
解决方法:将
sort
_index()改为
sort
_values()即可。
在解决一道编程题目(把数组排成最小数)
中
使用
sort
ed
()
函数
嵌套lambda表达式
中
遇到了问题,几经周折终于弄明白用法了。
错误示范1:
numbers.
sort
(key=lambda x, y: cmp(x + y, y + x))
报错为:TypeError: () missing 1 requir
ed
positional argument: ‘y’
错误示范2:
numb...
python
3.7 pycharm 2018.3.1
遇到的问题解释及处理方法
#1 报错#TypeError: ‘key’ is an invalid keyword argument for print()
def _cmp(x, y):
if x > y:
return -1
if x < y:
return
sort
ed
和
sort
都是
Python
中
的列表排序
函数
,但是它们有一些不同的地方。
sort
ed
是内置
函数
,可以对任何可迭代的对象进行排序,并返回一个排序后的列表。它不会修改原对象,而是返回一个新的列表。
sort
是列表对象的方法,仅能对列表对象进行排序,并修改原对象,没有返回值。
tzw_cs: