欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python 实用小技巧精选收藏

程序员文章站 2022-07-12 09:31:24
...

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