Python常⽤的函数及模板
最近开始⽤刷题,以下⽅法和函数都是基于Python3,记录⼀下常⽤的排序函数,常⽤的容器等,学到⼀些新的也会加进去
创建三维 的 l * m * n 数组:
1L = [ [ [0] * n for i in range(m) ] for i in range(l)]
2
3# 创建值为2的字典,可嵌套
4dp = defaultdict(lambda : defaultdict(lambda : 2))
list排序:
1#list为⼆维以上数组,且list为2维以上的数组,会按照l[i]的长度,l[0]的⼤⼩,l[1]的⼤⼩降序排序,优先级依次为l的长度,l[0],l[1]的⼤⼩升序排序2from operator import *
3
4l = [[1,2,3],[1,1,3],[2,1,2],[1,1,1,1]]
5l.sort(key = lambda x :(len(x),x[0],x[1]))
6#输出为: [[1, 1, 3], [1, 2, 3], [2, 1, 2], [1, 1, 1, 1]]
7
8#排序时可以选择加上参数 revrese,即为按lambda设置的参数倒序输出
9l.sort(key = lambda x:(len(x),x[0],x[1]),reverse = True)
10#输出为:[[1, 1, 1, 1], [2, 1, 2], [1, 2, 3], [1, 1, 3]]
11
12#需导⼊ from operator import *
13l.sort(key = itemgetter(0,1))
14#以上述的结果按第⼀列第⼆列的值进⾏排序,排序的结果为:[[1, 1, 1, 1], [1, 1, 3], [1, 2, 3], [2, 1, 2]]
python获取数组长度
15
16# 第⼀种⽅法:
17import functools
18nums = '1325135'
19#⼀定要写清楚哪种⽅法返回1,哪种返回-1,按照设置-1的顺序排序
20def cmp(s1,s2):
21 return -1 if s1 > s2 else 1
22 # return 1 if s1 + s2 < s2 + s1 else -1
23nums = [str(i) for i in nums]
24#按照nums的关键字排序,但是是按cmp的规则逆序排序
25nums.sort(key = p_to_key(cmp))
26# 输出为['5', '5', '3', '3', '2', '1', '1']
27
28
29#第⼆种⽅法:将key的值设置为类,在类的__lt__函数中设置排序顺序,最后得到的顺序与⾃⼰设置的⼀样
30# __gt__为⼤于,升序,__lt__为⼩于,降序,只能取其中⼀个
31class LargerNumKey(str):
32 # def __lt__(x, y):
33 # return x < y
34 def __gt__(x,y):
35 return x > y
36nums.sort(key = LargerNumKey)
37# 输出为['1', '1', '2', '3', '3', '5', '5']
38
39
40arr = [0,1,2,3,4,5,6,7,8]
41l = [0, 1, 1, 2, 1, 2, 2, 3, 1]
42# 将两个list zip后按照l的⼤⼩的相对位置进⾏排序
43r = [y for x,y in sorted(zip(l,arr))]
44# 输出为r = [0,1,2,4,8,3,5,6,7]
zip
1 a = [i for i in range(4)]
2 b = [i for i in range(4,10)]
3 c = zip(a,b)
4# c为[(0,4),(1,5),(2,6),(3,7)]
5d,e = zip(*c)
6# d = (0, 1, 2, 3),e = (4, 5, 6, 7)
字典排序:
1#字典中的函数
2 d = {'a':12,'b':23,'aa':13,'bad':23}
3print(d.keys()),print(d.values())
4#输出为:dict_keys(['a', 'b', 'aa', 'bad']) dict_values([12, 23, 13, 23])
5print(d.items())
6#输出以字典d键值对的元祖:dict_items([('a', 12), ('b', 23), ('aa', 13), ('bad', 23)])
(1),d.get('a'))
8#输出为:None 12
9
10#对字典排序,字典没有sort⽅法
11print(sorted(d))
12#默认对d的键进⾏排序,逆序输出,输出为:['a', 'aa', 'b', 'bad']
13print(sorted(d.values))
14#对d的值进⾏排序,逆序输出,输出为:[12, 13, 23, 23]
15
16t= sorted(d.items(),key=lambda x:x[0])
17print(t)
18#以d.items()为对象排序,按照键的值升序排序,输出为元组,结果为:[('a', 12), ('aa', 13), ('b', 23), ('bad', 23)]
19
20from operator import itemgetter
21print(sorted(d.items(),key=itemgetter(0)))
22#itemgetter(0),获取key,按key值排序,与lambda类似,同样也可以进⾏多值排序,在itemgetter中加⼊(0,1),输出为元组,结果为:[('a', 12), ('aa', 13堆的使⽤
1h = []
2#i为⼩根堆,-i为⼤根堆
3for i in nums:
4 heapq.heappush(h,-i)
5for i in range(k -1):
6 heapq.heappop(h)
7return -h[0]
字符串处理
1p = [1,2,5,4,6,7]
2data = ' '.join([str(i) for i in p])
3print(data,type(data))
4# 将list中的数字转为字符串并⽤空格隔开
5# 1 2 5 4 6 7 <class 'str'>
6data = data.split()
7print(data)
8# 去除空格 ['1', '2', '5', '4', '6', '7']
9data = [int(i) for i in data]
10# 转换为int 型list
11# print(data) [1, 2, 5, 4, 6, 7]
双端队列
1from collections import *
2# 初始化队列为list
3q = deque([])
4# 从右侧加⼊数据
5q.append(1)
6# 从左侧加⼊数据
7q.appendleft(2)
8l = [1,4,2,5]
9q.append(l)
10# print(q) deque([2, 1, [1, 4, 2, 5]])
11q.popleft()
12q.pop()
13# print(q) deque([1])
dict创建
1# 创建默value 值为0,key值为26个⼩写字母
2d1 = {chr(x): 0 for x in range(ord('a'), ord('z') + 1)} python 处理输⼊数据
1c,n,m = map(int,input().strip().split())
2# 多组输⼊
3while True:
4 try:
5 data=map(int,input().strip().split())
6 except EOFError:
7 break
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论