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 的sorted用法,按照特定的序列排序。如下文,请知道的大大详细解释下key代表的什么。

sorted(list,key=dic_be_ranked.__getitem__)

㈢ python列表排序方法

列表的sort方法就是用来进行排序的。

主要就是两个参数,key,reverse


先说reverse,这个很简单,就是指出版是否进行倒序排序:权一般情况下,1排在2的前面,而倒序则相反。


key参数:一般它是一个函数,它接受列表中每一个元素,返回一个可用用于比较的值。

s=[1,2,3,4,5]

s.sort(key=lambda _: _**2%7)

print(s)

输出的是:[1, 3, 4, 2, 5]

如果看不懂lambda表达式,可以看这一段等价的写法:

def myfn(x):

....return (x * x) % 7


s=[1,2,3,4,5]

s.sort(key=myfn)

print(s)

输出的结果是一样的。

key使用的函数可以是自定义函数也可以pytho内置的函数,或者是某个类或者实例的方法,只要它能接受一个参数,返回一个可比较的值即可。比如这样:

s=[[1,2,4],[3,3,5],[1,1,1],[5,7,9]]

s.sort(key=max) # 直接使用max函数作为排序依据

print(s)

[[1, 1, 1], [1, 2, 4], [3, 3, 5], [5, 7, 9]]


㈣ 在Python 3 中的自定义排序怎么办

python3 sorted取消了对cmp的支持。
python3 帮助文档:
sorted(iterable, key=None, reverse=False)

  • reverse是一个布尔值。如果设置为True,列表元素将被倒序排列,默认为False

  • key接受一个函数,这个函数只接受一个元素,默认为None

  • Key的作用原理

    Python2中的自定义布尔函数cmp=custom_cmp(x, y)由Python3中的key=custom_key(x)代替。

    在python3中,待比较元素x通过custom_key函数转化为Python能比较的值custom_key(x),进而再基于返回值进行排序。

    例子1:

  • 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

  • 例子2

  • students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]

  • sorted(students,key=lambda x: x[2]) #按照年龄来排序12

  • 关于lambda表达式

    例子3

    默认sorted([True, False])==[False, True] (False=0 < True=1)

    一个字符串排序,排序规则:小写<大写<奇数<偶数

  • #元组内(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表示在前面基础上,对所有类别数字或字母排序。

㈤ python排序问题

s = [9, 2, -4, 7, -1, 0, 5, -2, -5]
def sort_abs(s):
s2 = []
for i in s:
s2.append(abs(i))
s2.sort()
for j in range(len(s2)):
try:
if s2[j] == s2[j + 1]:
s2[j] = -s2[j]
except:
break
return s2
print(s)
print(sort_abs(s))

㈥ python3没有了Cmp函数,自定义的排序sort方法不是需要它作参数吗!!怎么办

自定义排序用key关键字
>>> a=['abc','abcd','ab']
>>> a.sort(key=len) #使用len函数返回的大小排序
>>> a
['ab', 'abc', 'abcd']

key和reverse是有的,试一下就知道了

㈦ Python学习小技巧之列表项的排序

Python学习小技巧之列表项的排序
本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

典型代码1:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list.sort()
print(data_list)

输出1:
[-100, 0, 1, 3, 6, 9, 10, 100]

典型代码2:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list_ = sorted(data_list)
print(data_list)
print(data_list_)

输出2:
[6, 9, 1, 3, 0, 10, 100, -100]
[-100, 0, 1, 3, 6, 9, 10, 100]

应用场景

需要对列表中的项进行排序时使用。其中典型代码1是使用的列表自身的一个排序方法sort,这个方法自动按照升序排序,并且是原地排序,被排序的列表本身会被修改;典型代码2是调用的内置函数sort,会产生一个新的经过排序后的列表对象,原列表不受影响。这两种方式接受的参数几乎是一样的,他们都接受一个key参数,这个参数用来指定用对象的哪一部分为排序的依据:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1]) # 我们想要基于列表项的第二个数进行排序
print(data_list)

>>> [(77, 34), (55, 97), (0, 100)]

另外一个经常使用的参数是reverse,用来指定是否按照倒序排序,默认为False:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1], reverse=True) # 我们想要基于列表项的第二个数进行排序,并倒序
print(data_list)
>>> [(0, 100), (55, 97), (77, 34)]

带来的好处

1. 内置的排序方法,执行效率高,表达能力强,使代码更加紧凑,已读

2. 灵活的参数,用于指定排序的基准,比在类似于Java的语言中需要写一个comparator要方便很多

其它说明

1. sorted内置函数比列表的sort方法要适用范围更广泛,它可以对除列表之外的可迭代数据结构进行排序;

2. list内置的sort方法,属于原地排序,理论上能够节省内存的消耗;

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助

㈧ python自定义模式排序代码解读问题

sorted(L, key = by_name),是将L中的每个元素作用于by_name函数,比如第一步,内部是将L中的第一个元素('Bob', 75)作用于by_name,获取到Bob,然后依次获取其他的元素,再进行排序

㈨ python对列表里的元素进行排序

l=['e','d','c','b','a']
l.sort()
print(l)
e=list(enumerate(l))
print(e)

㈩ python怎样用自定义函数对列表排序

您好!我写了一个升序的方法供您参考:

请注意,要在 idle 中运行这个方法,并输入你希望的值

下面讲解一下:

方法体的第一句用于把你输入的数字储存在列表中,这句可以用于其他许多场合

后续的代码就是不断地递归,从而达到升序的效果

有不懂的可以问我哦~望点赞!