Python(二十五):排序、反转

排序

list

两种方法:list的方法sort()、内置函数sorted()

li = [3,1,5,4,9,6]
li.sort(reverse=True)		# 降序,永久性函数
print(li)

li = [3,1,5,4,9,6]
li = sorted(li, reverse=True)	# 降序,暂时性函数(有返回 li=)
print(li)

str、tuple

str、tuple 都要转为 list,再排序

dict、set

d = {'b': 1, 'a': 2, 'c': 10}
# 键的升序排序
li = sorted(d.items(), key=lambda x: x[0]) 
print(li)		# [('a', 2), ('b', 1), ('c', 10)]
# 值的升序排序
li = sorted(d.items(), key=lambda x: x[1]) 
print(li)		# [('b', 1), ('a', 2), ('c', 10)]


s = {4,3,5,1,2}
li = sorted(s)
print(li)		# [1, 2, 3, 4, 5]

多级排序:key=

key:

  • key=str.lower
    排序忽略大小写
  • key=lambda …
  • key=fun

key:多级的升序降序用符号,如 -x[0]

li = [
	('d', 10),
	('d', 0),
	('a', 20)
	]
li.sort(key=lambda x:x[0])		# 按li[0]排序
print(li)		# [('a', 20), ('d', 10), ('d', 0)]
li.sort(key=lambda x:(x[0],x[1]))		# 分级排序,若第一级相等,则按第二级排序
print(li)		# [('a', 20), ('d', 0), ('d', 10)]
li.sort(key=lambda x:(x[0],-x[1]))		# 分级排序
print(li)		# [('a', 20), ('d', 10), ('d', 0)]


li = [13, 28, 37]
def fun(x):
	return x%10
li.sort(key=fun, reverse=True)		# 按个位数 降序
print(li)		# [28, 37, 13]



li = [
	{'name':'d', 'age':10},
	{'name':'d', 'age':0},
	{'name':'a', 'age':20},
	]
li = sorted(li, key=lambda x:(x['name'],x['age']))		# 分级排序
print(li)		# [{'name': 'a', 'age': 20}, {'name': 'd', 'age': 0}, {'name': 'd', 'age': 10}]



class Student():
	def __init__(self, name, age):
		self.name = name
		self.age = age
	
	def __repr__(self):
		return repr((self.name, self.age))
		
li = [
	Student('d', 10),
	Student('d', 0),
	Student('a', 20),
	]
li.sort(key=lambda x: (x.name, -x.age))
print(li)			# [('a', 20), ('d', 0), ('d', 10)]

反转

list

三种方法:

  • 切片
  • list的方法reverse()
  • 内置函数reversed()
# 切片
li = [1,2,3,4]
print(li[::-1])

# .reverse
li = [1,2,3,4]
li.reverse()	# 永久
print(li)

# reversed
li = [1,2,3,4]
it = reversed(li)	# 返回迭代器
for x in it:
	print(x)

str

# 切片
s = 'abcd'
print(s[::-1])		# dcba  

# reversed
s = 'abcd'
s = ''.join(reversed(s))
print(s)		# dcba 

tuple

# 切片
t = [1,2,3,4]
print(t[::-1])		[4, 3, 2, 1]

# reversed
t = [1,2,3,4]
it = reversed(t)
for x in it:
	print(x)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值