pythonsort自定义
⑴ 关于python中sort函数赋值的问题
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:
一、基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
123
x = [4, 6, 2, 1, 7, 9]x.sort()print x # [1, 2, 4, 6, 7, 9]
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
12345
x =[4, 6, 2, 1, 7, 9]y = x[ : ]y.sort()print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
另一种获取已排序的列表副本的方法是使用sorted函数:
1234
x =[4, 6, 2, 1, 7, 9]y = sorted(x)print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]
sorted返回一个有序的副本,并且类型总是列表,如下:
1
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定义比较函数
可以定义自己的比较函数,然后通过参数传递给sort方法:
12345678910111213
def comp(x, y):if x < y:return 1elif x > y:return -1else:return 0 nums = [3, 2, 8 ,0 , 1]nums.sort(comp)print nums # 降序排序[8, 3, 2, 1, 0]nums.sort(cmp) # 调用内建函数cmp ,升序排序print nums # 降序排序[0, 1, 2, 3, 8]
三、可选参数
sort方法还有两个可选参数:key和reverse
1、key在使用时必须提供一个排序过程总调用的函数:
123
x = ['mmm', 'mm', 'mm', 'm' ]x.sort(key = len)print x # ['m', 'mm', 'mm', 'mmm']
2、reverse实现降序排序,需要提供一个布尔值:
123
y = [3, 2, 8 ,0 , 1]y.sort(reverse = True)print y #[8, 3, 2, 1, 0]
⑵ python3没有了Cmp函数,自定义的排序sort方法不是需要它作参数吗!!怎么办
python3开始没这个函数了,官方文档是这么写的
The cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. Use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (If you really need the cmp() functionality, you could use the expression (a > b) - (a < b) as the equivalent for cmp(a, b).)
大意就是cmp()函数已经“离开”了,如果你真的需要cmp()函数,你可以用表达式(a > b) - (a < b)代替cmp(a,b)
key和reverse还是可以用的。
如果解决了您的问题请采纳!
如果未解决请继续追问!
⑶ Python里的sort语句
Python中的sort()函数是序列的内部函数,函数原型:
L.sort(cmp=None,key=None,reverse=False)
函数作用:它是把L原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序。
Python中sort()参数说明:
(1) cmp参数
cmp接受一个函数,拿整形举例,形式为:
deff(a,b):
returna-b
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了。
(2) key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下:
deff(a):
returnlen(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
(3) reverse参数
接受False 或者True 表示是否逆序
Python中sort()函数举例:
(1)按照元素长度排序
L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff(x):
returnlen(x)
sort(key=f)
printL
//输出:
//[{1:9},{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6}]
(2)按照每个字典元素里面key为1的元素的值排序
L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff2(a,b):
returna[1]-b[1]
L.sort(cmp=f2)
printL
//输出:
//[{1:1,2:4,5:6},{1:3,6:3},{1:5,3:4},{1:9}]
⑷ python,sort方法使用固定排序方法与sort(cmp)的升序排列有什么不一样
sort方法使用默认的元素比较函数
sort(cmp)可以自己定义元素比较函数
得到的排序结果不同。
⑸ 编写一个自定义函数selection_sort(a,asc)(不能调用python内置的sort方法或sorted函数)
defselection_sort(a,asc):
b=[]
whilelen(a)>0:
b.append(a[0])
foriina:
if(b[-1]<iandnotasc)or(b[-1]>iandasc):
b[-1]=i
a.remove(b[-1])
returnb
⑹ python2 自定义排序规则如何排序
#分类函数
defselect(i):
return(i%3>0)and(i%2==0)
#不同分类的排序算法
sort_funcs={
#升序
True:lambdalst:sorted(lst,reverse=False),
#降序
False:lambdalst:sorted(lst,reverse=True)
}
#混合排序
defmix_sort(arr,select,sort_funcs):
sequence={key:iter(func(vfori,vinenumerate(arr)ifselect(i)==key))forkey,funcinsort_funcs.iteritems()}
return[next(sequence[select(i)])fori,_inenumerate(arr)]
#输出
arr=[0,1,2,3,4,5,6,7,8,9]
printmix_sort(arr,select,sort_funcs)
>>[9,7,2,6,4,5,3,1,8,0]
arr=[1,5,4,3,10,7,19]
printmix_sort(arr,select,sort_funcs)
>>[19,7,4,5,10,3,1]
在 arr =[0,1,2,3,4,5,6,7,8,9] 中,下标和值相同,比较好说明
arr 中 [2, 4, 8] 符合 “不能被 3 但可以被 2 整除”,升序为 [2, 4, 8]
arr 中 [0, 1, 3, 5, 6, 7, 9] 不符合“不能被 3 但可以被 2 整除”,降序为 [9, 7, 6, 5, 4, 1, 0]
按原先的位置组合,结果为[9,7,2,6,4,5,3,1,8,0]
不知道我理解得对不对
⑺ python怎样用自定义函数对列表排序
您好!我写了一个升序的方法供您参考:
请注意,要在 idle 中运行这个方法,并输入你希望的值
下面讲解一下:
方法体的第一句用于把你输入的数字储存在列表中,这句可以用于其他许多场合
后续的代码就是不断地递归,从而达到升序的效果
有不懂的可以问我哦~望采纳!
⑻ 在Python 3 中的自定义排序怎么办
python3 sorted取消了对cmp的支持。
python3 帮助文档:
sorted(iterable, key=None, reverse=False)
reverse是一个布尔值。如果设置为True,列表元素将被倒序排列,默认为False
key接受一个函数,这个函数只接受一个元素,默认为None
- my_alphabet = ['a', 'b', 'c']def custom_key(word):
- numbers = [] for letter in word:
- numbers.append(my_alphabet.index(letter)) return numbers# python中的整数列表能够比较大小# custom_key('cbaba')==[2, 1, 0, 1, 0]x=['cbaba', 'ababa', 'bbaa']
- x.sort(key=custom_key)123456789101112
- students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]
- sorted(students,key=lambda x: x[2]) #按照年龄来排序12
- #元组内(e1, e2, e3)的优先级排列为: e1 > e2 > e3sorted(s, key=lambda x: (x.isdigit(),x.isdigit() and int(x) % 2 == 0,x.isupper(),x)#input: 'asdf234GDSdsf23'#output: 'addffssDGS33224'12345
x.isdigit()的作用是把数字放在后边(True),字母放在前面(False).
x.isdigit() and int(x) % 2 == 0的作用是保证数字中奇数在前(False),偶数在后(True)。
x.isupper()的作用是在前面基础上,保证字母小写(False)在前大写在后(True).
最后的x表示在前面基础上,对所有类别数字或字母排序。
Key的作用原理
Python2中的自定义布尔函数cmp=custom_cmp(x, y)由Python3中的key=custom_key(x)代替。
在python3中,待比较元素x通过custom_key函数转化为Python能比较的值custom_key(x),进而再基于返回值进行排序。
例子1:
例子2
关于lambda表达式
例子3
默认sorted([True, False])==[False, True] (False=0 < True=1)
一个字符串排序,排序规则:小写<大写<奇数<偶数
⑼ python sort()用法
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:
一、基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
另一种获取已排序的列表副本的方法是使用sorted函数:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
sorted返回一个有序的副本,并且类型总是列表,如下:
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定义比较函数
可以定义自己的比较函数,然后通过参数传递给sort方法:
def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
三、可选参数
sort方法还有两个可选参数:key和reverse
1、key在使用时必须提供一个排序过程总调用的函数:
x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print x # ['m', 'mm', 'mm', 'mmm']
2、reverse实现降序排序,需要提供一个布尔值:
y = [3, 2, 8 ,0 , 1]
y.sort(reverse = True)
print y #[8, 3, 2, 1, 0]
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python , 方法 sort python sort方法、python魔术方法详解、python实例方法详解、list.sort 使用方法、c list.sort 使用方法,以便于您获取更多的相关知识。
⑽ python自定义模式排序代码解读问题
sorted(L, key = by_name),是将L中的每个元素作用于by_name函数,比如第一步,内部是将L中的第一个元素('Bob', 75)作用于by_name,获取到Bob,然后依次获取其他的元素,再进行排序