相关文章推荐
腹黑的板凳  ·  basic_ifstream Class ...·  1 年前    · 

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: 这个多年没有维护所以不看了不好意思,估计你也不再需要了。回复给类似遇到这个问题的同学一个参考。 像这种动态的比较麻烦一般都需要用js执行才能获取到。另外一种方便的办法是浏览器打开Inspect element 然后看Network,再在页面上点击然后看network的url。比如你这个就会有下面request,然后就用httprequest去发送来得到数据的response。还有一种办法是用webdriver之类的模拟人工的工具去点击然后再获取页面元素去解析。 URL: https://s8hwxkltn6.jiandaoyun.com/_/data/dash/list JSON: {appId: "5de0b3e85600ec0006f420f2", entryId: "5f48d400a25baa0006034c28",…} appId: "5de0b3e85600ec0006f420f2" entryId: "5f48d400a25baa0006034c28" filter: {cond: [], rel: "and"} fx_access_token: "5f48d400a25baa0006034c29" fx_access_type: "dash_public" hasCount: false isCountOnly: false limit: 20 skip: 80 sort: [] widgetId: "_widget_1598608578314"