列表排序

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

猜你喜欢

转载自blog.51cto.com/13496943/2126462