算法比赛常用python语法
循环控制
# 指定起始点 for i in range(1, 10) # 指定步长 for i in range(1, 10,2) # 使用range()函数来创建一个列表: list(range(5)) # [0,1,2,3,4] # pass语句 while True: pass # 占位符 为了弥补没有空分号的缺陷
py可以对循环语句使用else
count = 0 while count < 5: print (count, " 小于 5") count = count + 1 else: print (count, " 大于或等于 5") ''' 输出结果 0 小于 5 1 小于 5 2 小于 5 3 小于 5 4 小于 5 5 大于或等于 5 '''
常用TIPS
一行输入多个数据
m,n=map(int, input().split()) # 一行内输入多个数据 a=list(map(int,input().split())) a=[0]+list(sorted(map(int,input().split())))
push_back
ans=[] for i in a: ans.append(i%26) #
try-except多组输入
try: while True: s,mod = map(str,input().split()) Sum = 0 for i in s: Sum = (Sum*26+ord(i)-97) Sum += int(mod) if Sum >= 308915776: print(-1) continue ans='' for i in range(6): ans += chr(Sum%26+97) Sum //= 26 print(ans[::-1]) except: pass
切片
>>>a=[1,2,3,4,5] >>>print(a) [ 1 2 3 4 5 ] >>>print(a[:-1]) ## 除了最后一个取全部 [ 1 2 3 4 ] >>>print(a[::-1]) ## 取从后向前(相反)的元素 [ 5 4 3 2 1 ] >>>print(a[2::-1]) ## 取从下标为2的元素翻转读取 [ 3 2 1 ]
格式化输出
print('%.2f' % ans)
其实.format()是更新的方案
https://www.runoob.com/python3/python3-inputoutput.html
几个代码段
mod = 1000000007 n = int(input()) p = [0] + list(map(int, input().split())) dp = [[0] * (n + 1) for _ in range(n + 1)] dp[0][0] = 1 for i in range(1, n + 1) : for j in range(i + 1) : dp[i][j] = (dp[i - 1][j] * (mod + 1 - p[i]) % mod + (dp[i - 1][j - 1] * p[i] % mod if j else 0)) % mod print(' '.join(map(str, dp[n])))
join的使用
str = "-"; seq = ("a", "b", "c"); # 字符串序列 print str.join( seq ); # a-b-c
排序/set
import math n = 100 factory = [1] for i in range(2, int(math.sqrt(n)) + 1): if (n % i == 0): factory.append(i) if (i * i != n): factory.append(n // i) print(sorted(factory))
import math thisset = set(("Google", "Runoob", "Taobao")) # set创建 n = 100 factory = {1} for i in range(2, int(math.sqrt(n)) + 1): if (n % i == 0): factory.add(i) if (i * i != n): factory.add(n // i) print(sorted(factory)) print(factory) print(sorted(factory, key=lambda x: x*-1)) #倒序 print(sorted(factory, reverse=True)
sorted 的应用,也可以通过 key 的值来进行数组/字典的排序,比如:
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}] array = sorted(array,key=lambda x:x["age"]) print(array)Output
[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]
先按照成绩降序排序,相同成绩的按照名字升序排序:
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}] l = sorted(d1, key=lambda x:(-x['score'], x['name'])) print(l)Output
[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]