列表排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表排序相关的知识,希望对你有一定的参考价值。

list.sort()
不可逆排序,改变原有列表,sort 没有返回值

>> a.sort()
>> a
[2, 3, 8, 9, ‘a‘]

sort函数
语法:
L.sort(cmp=None, key=None, reverse=False)
cmp(x, y) -> -1, 0, 1
描述:
对原序列进行排序,也就是直接在原序列上操作,没有返回值
cmp:为一个定制的比较函数,接受两个参数,并且如果第一个参数小于第二个参数,则返回一个负数,大于则返回一个整数,等则返回0。默认值为None。
key:也是一个函数,这个函数会从每个元素中提取一个用于比较的关键字。默认值为None。
reverse:接受False或者True,表示是否逆序。如设置为True,表示逆序

需要注意:
sort()方法仅定义在list中,而sorted()方法对所有的可迭代序列都有效

代码示例:
按照序列的长度倒序排序

list1 = [(1,5,3),(1,3,6,3),(1,1,2,4,5,6),(1,9)]
def L(tup):
    return len(tup)
list1.sort(key=L,reverse = True)#list1.sort(key=len,reverse=True)
print list1

小练习:
1、求出s中长度最长的字符串

s ="i am a boy iii"
def L(s):
    return len(s)
list1=s.split()
list1.sort(key=L,reverse = True)
print filter(lambda x:len(x)==len(list1[0]),list1)

2、L中分别按照学生姓名和学生成绩排序

L = [(‘Bob‘, 75), (‘Adam‘, 92), (‘Bart‘, 66), (‘Lisa‘, 88)]
def by_name(t):
    return t[0]
def by_score(t):
    return t[1]

print sorted(L,key = by_name)
print sorted(L,key = by_score)

3、按照句子中每个单词的首字母进行排序,不区分大小写

s ="I am A boy iii huhongqiang"
def first_letter(s):
    return s[0].lower()
list1=s.split()
list1.sort(key=first_letter)
print list1

4、按照字符串每个数字的和进行排序
方式1:

s ="11 22  33 44 394 55"
list1=s.split()
def sum(s):
    result =0
    for i in s:
       result+=int(i)
    return  result
list1.sort(key=sum,reverse=True)
print list1

方式2:

s ="11 22  33 44 394 55"
list1=s.split()
def sum1(s):
    return sum(map(lambda x:int(x),s))
#return  sum(map(int,list(s)))
#return sum([int(v) for v in x ])
    list1.sort(key=sum1,reverse=True)
print list1

以上是关于列表排序的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

如何使列表视图出现在片段中?

如何在滚动列表视图上显示/隐藏底部导航视图?

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用

架构丰富的代码片段也应该用于产品列表吗?

片段 A 的列表视图中的片段 B 中的新列表视图,单击 A 的列表项