python——sort与sorted

sorted( )函数是用来对可迭代对象排序的,与列表的list( )函数不同,后者是在原位置上进行排序的,排序后原列表的元素顺序会发生改变,而前者是将排序后的结构生成到一个新的列表中。

list = [1,2,7,66,3,4,9,8,0]
print(list)
list2 = sorted(list)
print(list2)

第一个的实验结果式为进行排序的,第二种的是进行排序了。sorted的使用

[1, 2, 7, 66, 3, 4, 9, 8, 0]
[0, 1, 2, 3, 4, 7, 8, 9, 66]
list.sort()
print(list)

[0, 1, 2, 3, 4, 7, 8, 9, 66]    这种的方式也是可以进行排序的

按照数字的大小排序

list1 = [1,3,4,-5,-8,9,-7]
print(list1)        不排序
list1.sort()
print(list1)           按照数字的大小进行排序

[1, 3, 4, -5, -8, 9, -7]
[-8, -7, -5, 1, 3, 4, 9]

取绝对值排序

list1 = [1,3,4,-5,-8,9,-7]
list2 = sorted(list1,key=abs)
print(list2)

[1, 3, 4, -5, -7, -8, 9]

按照大小写排序

s= ['Abs','Dfs','Fsd','bbs']
print(s)            不排序 
print(sorted(s))         
print(sorted(s,key=str.lower))          按照小写排序
print(sorted(s,key=str.upper,reverse=True))                按照大写排序
 
['Abs', 'Dfs', 'Fsd', 'bbs']
['Abs', 'Dfs', 'Fsd', 'bbs']
['Abs', 'bbs', 'Dfs', 'Fsd']
['Fsd', 'Dfs', 'bbs', 'Abs']

实验

info = [
    # 商品名称 商品数量 商品价格
    ('apple1',200,32),
    ('apple2', 40, 12),
    ('apple3', 1000, 23),
    ('apple1', 40, 2),
    ('apple1', 40, 5)
]
#按照商品数量进行排序
def num(x):
    return x[1]
#按照商品价格进行排序
def price(x):
    return x[2]
#先按照商品数量进行小-大的排序,如果商品数量一样
# 则按照商品价格由小-大进行排序
def num_price(x):
    return x[1],x[2]
print(sorted(info,key=num))
print(sorted(info,key=price))
print(sorted(info,key=num_price))

[('apple2', 40, 12), ('apple1', 40, 2), ('apple1', 40, 5), ('apple1', 200, 32), ('apple3', 1000, 23)]
[('apple1', 40, 2), ('apple1', 40, 5), ('apple2', 40, 12), ('apple3', 1000, 23), ('apple1', 200, 32)]
[('apple1', 40, 2), ('apple1', 40, 5), ('apple2', 40, 12), ('apple1', 200, 32), ('apple3', 1000, 23)]

练习
假设我们用一组tuple表示学生名字和成绩,L =
[(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66),
(‘Lisa’, 88)],按名字进行排序

[('Bob', 75), ('Adam', 92), ('Bart', 66),
('Lisa', 88)]
print(sorted(L,key=lambda x:x[0]))

[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
#输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0 =2
7 =1
0 =2
2 =1
#输出:
调整后数组的内容;
7
2
0
0

n = int(input())
li = [int(input()) for i in range(n)]
def num(item):
    if item == 0:
        return 2
    else:
        return 1
    for i in sorted(li,key=num):
        print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值