排序
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)