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)