1. 序号填充补零
>>> for i in range(12): 'No.'+str(i+1).zfill(3) >>> for i in range(12): 'No.%.3d'%(i+1) >>> for i in range(12): 'No.{0:03}'.format(i) ''' 三种方法等效,均为: 'No.001' 'No.002' 'No.003' 'No.004' 'No.005' 'No.006' 'No.007' 'No.008' 'No.009' 'No.010' 'No.011' 'No.012' 三种方法体现了三种连接字符串的方式,其中方法三若使用多变量: 'x={0:03} y={1} z={2}'.format(x,y,z) '''
2. 一行代码实现斐波那契数列
>>> Fib=lambda n: ([F[0] for F in [(f[i][0], f.append((f[i][1], f[i][0]+f[i][1]))) for f in ([[1,1]],) for i in range(n)]]) >>> Fib(5) [1, 1, 2, 3, 5] >>> Fib(20) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] >>> Fib(12) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] >>> Fib(20)[11] 144
# 递归式: >>> Fib = lambda n,a=0,b=1: a if n==0 else Fib(n-1,b,a+b) >>> Fib(12) 144 >>> fib = lambda n: 1 if n<=2 else fib(n-1) + fib(n-2) >>> fib(12) 144
一行代码计算阶乘
>>> (lambda n: __import__('functools').reduce(int.__mul__,range(1,n+1),1))(5) 120 >>> (lambda n: __import__('functools').reduce(int.__mul__,range(1,n+1),1))(6) 720
3. 列表推导式: (也适用字典和集合)
# 例:输出偶数列,以下两种方法等效 >>> a=[i for i in range(20) if i%2==0] >>> b=[i*2 for i in range(10)] >>> >>> for i in a: print(i,end=' ') 0 2 4 6 8 10 12 14 16 18 >>> for i in b: print(i,end=' ') 0 2 4 6 8 10 12 14 16 18
4. for 循环不带变量,用“_”代替
>>> for _ in range(3): print(1) 1 1 1 # 例:初始化列表 >>> lst = [] >>> lst1 = [] >>> for _ in range(10): lst1.append(0) >>> lst2 = [0 for _ in range(10)] >>> lst1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] >>> lst2 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 推荐使用: >>> lst3 = [0]*10 >>> lst3 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
5. 若本地没有指定库则临时安装
import os try: import json except ImportError: os.system('pip install json') import json
6. for 循环也能和 else 搭配
for i in range(5): print(i,end='\t') else: print(i+1,end='\n\n\n') ''' 0 1 2 3 4 5 注:两者是顺序关系,若for句块中有break等跳出,则else句块执行不到 '''
7. 链式比较,可以和数学题中的写法一样: 0<a<5
>>> a=5 >>> 1<a<10 True >>> 1==a<=5 False >>> 1<=a==5 True >>> 5==a<10 True >>> a=6 >>> 5==a<10 False >>> 0<a>1 True # 逻辑值是前后两个等式的与运算
8. 多个比较,可以用 all() any() 代替 and or 表示全部成立和只要有一个成立
>>> a,b,c=1,5,8 >>> any([a>0,b>a,c>b]) True >>> all([a>0,b>a,c>b]) True >>> any([a>0,b<a,c<b]) True >>> all([a>0,b<a,c<b]) False >>>
9. 多个or比较,可以用in代替
>>> a=0 >>> if a in {1,2,3}: print(1) else: print(0) 0 >>> if a in [1,2,3]: print(1) else: print(0) 0 ''' 1. 等价于: if a==1 or a==2 or a==3: print(1) else: print(0) 2. in 后面用 [] {} 都可以 '''
10. 查找列表中出现次数最多(最少)的元素
>>> a=[1,2,3,1,2,2,2,4] >>> max(set(a),key=a.count) 2 >>> min(set(a),key=a.count) 3 # 若次数一样多,则返回首次出现的元素
11. 用列举函数enumerate遍历列表、字典的元素序号
>>> m=[0,1,3,2,3,6,1,3] >>> for i,n in enumerate(m): print(i+1,':',n) 1 : 0 2 : 1 3 : 3 4 : 2 5 : 3 6 : 6 7 : 1 8 : 3 >>> d={'a':97,'b':98,'c':99,'d':100} >>> for i,k in enumerate(d): print(i+1,':',k,'=',d[k]) 1 : a = 97 2 : b = 98 3 : c = 99 4 : d = 100
12. 三目操作符用于选择函数
>>> def add(a,b):return a+b >>> sub=lambda a,b:a-b >>> a,b=5,10 >>> (sub if a>b else add)(a,b) 15
函数表达式放进字典里:
dic = { "add": lambda x, y: x + y, "sub": lambda x, y: x - y } a,b=5,3 print((dic['add'] if a>b else dic['sub'])(a,b)) a,b=3,5 print((dic['add'] if a>b else dic['sub'])(a,b)) ''' 8 -2 '''