Python 实用小技巧精选收藏

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 abc 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
'''

猜你喜欢

转载自blog.csdn.net/boysoft2002/article/details/115419833