-
读入多行
n,m = map(int,input().split()) s = [[i for i in map(int,input().split())]for j in range(n)]
-
一维列表深拷贝
b = l[:]
-
二维列表深拷贝
b = [[l[i][j] for j in range(n)] for i in range(n)]
-
创建0二维列表
l = [[0]*n for i in range(n)]
-
清空列表
l.claer() l = [] l *= 0 del l[:]
-
sorted 语法:
sorted(iterable, key=None, reverse=False)
-
常用数学运算
abs(n) pow(x,y) sum() min() max() chr(x)将ascll码转换成字符 ord(x)将字符转换成ascll码 bin() oct() hex()
-
filter函数
def is_odd(x): return x % 2 == 1 print (list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))) >>>[1, 7, 9, 17]
-
help(math) dir(math)
-
常用str函数
n = 'a' n.isalpha() n.isdigit() n.lower() n.upper() n.istitle() n.zfill(2) #返回指定长度的字符串,原字符串右对齐,前面填充0。 n.title() #所有单词都是以大写开始,其余字母均为小写 n.split(' ', 1 ); # 以空格为分隔符,分隔成两个 n.rsplit() #类似split,区别为从结尾位置开始计数 n..strip( '0' ); # 去除首尾字符 0; 默认为空格或换行符
-
不确定行数的情况下读入
stopword = '' str = '' for line in iter(input, stopword): str += line + '\n' print(str)
-
删除列表某元素的四种方法
del list[index] del list[star:end] list.pop(index) #默认最后一个元素 list.remove(value) #remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的
-
多个元素排序
a.sort(key=lambda x:x['weights']) a.sort(keyattrgetter('age'))
-
print(*["Henan" if s == "henan" else s for s in input().split()])
-
列表,元组,字典相互转换
list(元组) tuple(列表) >>> cc = [('1',1),('2','jiqw'),('3',1372)] >>> dict(cc) {'1': 1, '3': 1372, '2': 'jiqw'} >>> a = [1,2,3] >>> b = [4,5,6] >>> dict(zip(a,b)) {1: 4, 2: 5, 3: 6}
-
对字典排序
sorted(dict)#按key排序 sorted(key_value.items(), key = lambda kv:(kv[1], kv[0]))#按value排序
-
遍历字典
dict.items()#返回可遍历的(键, 值) 元组数组。 for key,values in dict.items(): print key,values for key in dict.keys(): print(key) for values in dict.values(): print(values)
-
*号的作用
printt(*arge)#作为元组 序列 args 中的每个元素,当作位置参数传进去 printt(**arge)#作为字典 序列 args 中的每个元素,当作关键字参数传进去 对一个普通变量使用单星号前缀,能够将这个变量拆分成单个元素。 a = (1,2,3,4) b = [1,2,3,4] c = {'a':1,'b':2,'c':3,'d':4} print(*a) print(*b) print(*c) 1 2 3 4 1 2 3 4 a b c d
-
update方法 如果存在则更新,不存在则添加
dict.update({key:value})
-
字典的get方法
Help on method_descriptor: get(self, key, default=None, /) Return the value for key if key is in the dictionary, else default.
-
python中set()下remove和discard的区别
两者均用于删除set中的元素,当使用remove时,若删除目标元素不在指定set()中,则会报错,而discard则不会报错;两个方法均返回set中剩下的元素集合
-
大意:输入n和n个数字,求出现次数最多的数字。
示例代码:
#输入n n = int(input()) #n个数字存入到L列表 L =list(map(int, input().split())) #求出出现次数最多的数字 print(max(set(L), key = L.count)) #max()返回L.count(item)值最大的item,item来自set(L)
-
bin(X)、oct()、int()、hex()可实现进制转换;X = int
示例:
>>> print(int(48),oct(48),bin(48),hex(48)) 48 0o60 0b110000 0x30 for i in range(32): print(bin(i)[2:].zfill(5))00000 # 或者 for i in range(32): n = bin(i)[2:] print(n.rjust(5,'0')) 00001 00010 00011 00100 ……
-
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
>>>print chr(0x30), chr(0x31), chr(0x61) # 十六进制 0 1 a >>> print chr(48), chr(49), chr(97) # 十进制 0 1 a
-
ord() 它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值
>>>ord('a') 97 >>> ord('b') 98
-
join() 方法 用于将序列中的元素以指定的字符连接生成一个新的字符串。
str = "-"; seq = ("a", "b", "c"); # 字符串序列 print str.join( seq ); a-b-c
-
例题:
n, m = map(int, input().strip().split()) l = list(map(chr, range(ord('A'),ord('Z')+1))) s = ''.join(l) ss = s print(s[:m]) for i in range(1,n): ss = s[i] + ss ss = ss[:m] print(ss)
-
eval() 用来执行一个字符串表达式,并返回表达式的值
>>>x = 7 >>> eval( '3 * x' ) 21 n = eval(input().strip()) l = list(map(int, input().strip().split())) tmp = input().split() m = eval(tmp[0]) n = eval(tmp[1]) square = [] for i in range(m): t = list(map(int, input().split())) square.append(t)
-
index() 方法
检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常
str.index(str, beg=0, end=len(string))
如果包含子字符串返回开始的索引值,否则抛出异常。
ValueError: substring not found -
python去掉字符串中的空白字符
1、string.strip(s) s是一个序列,在string的两边删除string中在序列s中的字符 string.lstrip(s) 在string的左边删除string中在序列s中的字符 string.rstrip(s) 在string的右边删除string中在序列s中的字符,若没有指明s,则删除空白符(包括'\n', '\r', '\t', ' ') 2、import re re.sub('\s','',string) 将string中的所有空白字符删除 re.sub(['\"','\'','\s'],'',string) 将string中的所有空白字符及单双引号删除
-
iter() 用来生成迭代器
stopword = '' str = '' for line in iter(input, stopword): str += line + '\n'
-
dir(py) #看有哪些方法可用
-
help()函数是查看函数或模块用途的详细说明,而dir()函数是查看函数或模块内的操作方法都有什么,输出的是方法列表。
-
字符串翻转
str='Runoob' print(str[::-1]) boonuR print(''.join(reversed(str))) boonuR
-
reversed 函数 返回一个反转的迭代器。
seqList = [1, 2, 4, 3, 5] print(list(reversed(seqList))) [5, 3, 4, 2, 1]
-
count()方法语法:
str.count(sub, start= 0,end=len(string))
-
pop() 函数 用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
list.pop([index=-1])。
-
a = 12.12300 b = 12.00 c = 200.12000 d = 200.0 f = 12.1230003000 >>> [1,2][True] 2 >>> [1,2][False] 1 print([int(a)==a]) print([str(a),int(a)]) print ('a==>',[str(a),int(a)][int(a)==a])#结果为12.123 print ('b==>',[str(b),int(b)][int(b)==b])#结果为12 print ('c==>',[str(c),int(c)][int(c)==c])#结果为200.12 print ('d==>',[str(d),int(d)][int(d)==d])#结果为200 print('%s'%(a)) #12.123 print('%s'%(f)) #12.1230003 print('{:g}'.format(a))#12.123 print('{:g}'.format(f))#12.123
-
#按分数(降序)和名字(升序)排序 h.sort(key = lambda x:(-x['score'],x['name']))
-
格式化输出
a = 2019.12272256 s = '201912272303' print(' %f\n %.1f\n %e\n %g'%(a, a, a, a)) 2019.122723 2019.1 2.019123e+03 2019.12 print('%s\n%15s\n%-15s\n%15.4s'%(s,s,s,s)) 201912272303 201912272303 201912272303 2019 print('{} {}'.format('hello','world')) print('{0} {0} {1}'.format('hello','world')) print('{a} {a} {b}'.format(a='hello',b='world')) print('{0:b}'.format(3)) print("int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:b}".format(42)) print('{:*^30}'.format('centered')) print('{0} is {0:>10.2f}'.format(1.123)) print('Correct answers: {:.2%}'.format(1/4)) hello hello world hello hello world 11 int: 42; hex: 0x2a; oct: 0o52; bin: 101010 ***********centered*********** 1.123 is 1.12 Correct answers: 25.00% format(0.0015,'.2e') #科学计数法
-
格式符
格式符 格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下: %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符 %b 二进制整数 %d 十进制整数 %i 十进制整数 %o 八进制整数 %x 十六进制整数 %e 指数 (基底写为e) %E 指数 (基底写为E) %f 浮点数 %F 浮点数,与上相同 %g 指数(e)或浮点数 (根据显示长度) %G 指数(E)或浮点数 (根据显示长度) %% 字符"%" 可以用如下的方式,对格式进行进一步的控制: %[(name)][flags][width].[precision]typecode (name)为命名 flags可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。 width表示显示宽度 precision表示小数点后精度 比如: print("%+10x" % 10) print("%04d" % 5) print("%6.3f" % 2.3) 上面的width, precision为两个整数。我们可以利用*,来动态代入这两个量。比如: print("%.*f" % (4, 1.2)) Python实际上用4来替换*。所以实际的模板为"%.4f" https://blog.csdn.net/weixin_40583388/article/details/78600101 https://www.cnblogs.com/fat39/p/7159881.html#tag1
-
输入有多行(行数未知)
#方法一 import sys l=[] for line in sys.stdin: a = line.split () print(int(a[0]) + int(a[1])) import sys l = [] for line in sys.stdin: try: l += line except KeyboardInterrupt: break #方法二 import sys while True: n = sys.stdin.readline() if n == '\n': break #int(n) l = list(map(int ,sys.stdin.readline().split())) sum = 0 for i in l: if i>0: sum +=i print(sum) #方法三 stopword = '' str = '' for line in iter(input, stopword): str += line + '\n'
-
math函数
-
二进制转十进制
n = input() print(int(n,2))
-
查看所有内置函数 dir(__builtins__)
-
import datetime
import datetime t_str = '2015-04-07 19:11:21' d = datetime.datetime.strptime(t_str, '%Y-%m-%d %H:%M:%S') datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 所有的参数都有默认值0,这些参数可以是int或float,正的或负的。 可以通过 timedelta.days、tiemdelta.seconds 等获取相应的时间值。 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象 datetime 日期时间对象,常用的属性有hour, minute, second, microsecond datetime_CAPI 日期时间对象C语言接口 timedelta 时间间隔,即两个时间点之间的长度 tzinfo 时区信息对象
-
阶乘 functools.reduce
import functools result = (lambda k: functools.reduce(int.__mul__, range(1, k + 1), 1))(5) print(result) def fn(x, y): return x*y def frac(n): if n<=1: if n==0 or n==1: return 1 else: print('n 不能小于0') else: return functools.reduce(fn, range(1, n+1)) print(frac(5)) a=[1,3,5] b=reduce(lambda x,y:x+y,a) print('1.列表里面整数累加==:',b) 1.列表里面整数累加==: 9
-
全排列
import functools def fn(x, y): print(x) print(y) z =[] for z0 in x: for z1 in y: z.append(z0+z1) return z if __name__=='__main__': a, b = ['0','1','4', '9'], 3 # 4种字符,匹配5种字符 print(*functools.reduce(fn, [a] * b)) import itertools n = int(input()) a = [i for i in range(1,n+1)] l = list(itertools.permutations(a,n)) for i in l: print(*i)
-
DFS连通块
vis=[[0 for i in range(1000)] for i in range(1000)] dicx=[0,0,1,-1,-1,1,-1,1] dicy=[1,-1,0,0,1,-1,-1,1] def check(x,y): if x<0 or y<0 or x>=n or y>=m: return False elif vis[x][y]==1 or matrix[x][y]=='.': return False return True def dfs(x,y): vis[x][y]=1 for i in range(8): nx=x+dicx[i] ny=y+dicy[i] if check(nx,ny)==True: dfs(nx,ny) return if __name__=='__main__': n,m=map(int,input().split()) matrix=[] num=0 # for i in range(n): # matrix.append(input().split()) for i in range(n): matrix.append(input()) for i in range(n): for j in range(m): if matrix[i][j]=='.': vis[i][j]=1 elif matrix[i][j]=='W' and vis[i][j]==0: num+=1 dfs(i,j) print(num)
-
二维迷宫
import sys sys.setrecursionlimit(100000) ny = [0, 1, 0, -1] nx = [1, 0, -1, 0] n,m = 0,0 f = False def dfs(x,y): global f , n, m if x==n-1 and y==m-1: f = True if vis[x][y] == 0 and d[x][y] == '.': vis[x][y] = 1 #print(x,y) #print(f) for i in range(4): if 0<=x+nx[i]<n and 0<=y+ny[i]<m: dfs(x+nx[i], y+ny[i]) else: return if __name__=='__main__': n ,m = map(int, input().split()) vis = [[0 for i in range(m+5)]for i in range(n+5)] d = [] #f = False for i in range(n): d.append(input()) dfs(0,0) if(f): print('YES') else: print('NO')
-
try: 正常的操作 ...................... except: 发生异常,执行这块代码 ...................... else: 如果没有异常执行这块代码 try: fh = open("testfile", "w") try: fh.write("这是一个测试文件,用于测试异常!!") finally: print "关闭文件" fh.close() except IOError: print "Error: 没有找到文件或读取文件失败"
-
set()方法,保持原有顺序
numbers = [1,7,3,2,5,6,2,3,4,1,5] new_numbers = list(set(numbers)) new_numbers.sort(key=numbers.index) print(new_numbers)
-
空值
(Python中一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的值)
Python中的None与空字符(NULL)的区别 - 优快云博客 http://blog.youkuaiyun.com/crisschan/article/details/70312764
-
python列表list如何去除空值
new_list = filter(None, list)
filter()方法返回一个新的列表List,不改变原始列表,能够有效的去除List中False,0,None,空字符串等所有等于False的元素