Python:总结编程的一些小技巧(一)
1. 分割字符串,并且输出倒数第2个字符串。
a = '123|456|789|0'
s = a.split('|')[-2]
print(s)
2. 遍历2个列表,同步输出列表内容
a = '123456'
b = 'abcdef'
for a1, b1 in zip(a, b):
print(a1, b1)
a = '123456'
b = 'abcde' # 列表a,b长度不对齐时
for a1, b1 in zip(a, b):
print(a1, b1)
注:当列表长度不一时,以长度小的字符串为输出依据
3. 在字符串中插入变量
a = '12'
b = 3
c = 4
d = "56"
# 方法1
s = ''
s = a + str(b) + str(c) + d
print('方法1:' + s)
# 方法2
s = ''
s = '12%d%d56' % (b, c)
print('方法2:' + s)
# 方法3
s = ''
s = '12{}{}56'.format(b, c)
print('方法3:' + s)
# 方法4
s = ''
s = f'12{b}{c}56'
print('方法4:' + s)
4. 为每个字符串创建进度条
import time
from tqdm import trange # 进度条
a = ['a1', 'a2', 'a3']
for s in a:
with trange(10) as bar: # 进度条
for i in bar:
time.sleep(1)
bar.set_description(s)
5. 无需添加库,手动输出进度条
import time
length = 20 # '▉'的总长度
num = 1000 # 精度,每次增加1/num
step = num / length
for i in range(0, num + 1):
# 可在以下位置添加代码
time.sleep(0.01)
n = int(i / step)
f = '\r进度条:|{:<' + str(2*length - n) + '}|{:>7.1%}' # 调整进度条长度
print(f.format('▉' * n, i / num), end='')
print('\n')
6. 修改打印输出的结尾字符,避免直接换行
print('a') # 自动换行
print('b')
print('a', end='') # 自动换行
print('b')
print('a', end='-') # 以'-'结尾
print('b')
7. 居中对齐(左对齐、右对齐)打印数字,汉字和英文混合的表格
# 虽然len(排名)=len('12')=2,但实际显示字符所占空间,1个汉字占2个英文
s = [
{'排名': '1', '学校': '清华大学', '总分': '100', '网址': 'http://www.tsinghua.edu.cn'},
{'排名': '2', '学校': '北京大学', '总分': '80.5', '网址': 'http://www.pku.edu.cn'},
{'排名': '3', '学校': '香港中文大学', '总分': '70.1', '网址': 'http://www.cuhk.edu.hk'},
{'排名': '6', '学校': '中国科学技术大学', '总分': '61.4', '网址': 'http://www.ustc.edu.cn'},
{'排名': '15', '学校': '华中科技大学', '总分': '44.3', '网址': 'http://www.hust.edu.cn'},
{'排名': '33', '学校': '北京航空航天大学', '总分': '3.1', '网址': 'http://www.buaa.edu.cn'}
]
h = '-------------------------------------------------------------------------------------------------------------------'
n = 26 # 每n一列宽度,尽量为2的倍数
# 0:1: 2: 代表变量序号,与 % (n, n, n)对应
# - 表示空白部分用-填充
# ^ < >分别表示居中对齐,左对齐,右对齐
f = '{0:-^%d}|{1:-^%d}|{2:-^%d}|{3:-^%d}' % (n, n, n, n)
print(f.format('排名', '学校', '总分', '网址'))
for s1 in s:
n1 = n + len('排名') # 对于数字或英文,第1列实际宽度
n2 = n + len('学校') - len(s1['学校']) # 第2列实际宽度
n3 = n + len('总分') # 对于数字或英文,第3列实际宽度
n4 = n + len('网址') # 对于数字或英文,第4列实际宽度
f = '{0:-^%d}|{1:-^%d}|{2:-^%d}|{3:-^%d}' % (n1, n2, n3, n4)
print(f.format(s1['排名'], s1['学校'], s1['总分'], s1['网址']))
print() # 换行
n = 26 # 每n一列宽度,尽量为2的倍数
f = '{0:^%d}{1:^%d}{2:^%d}{3:^%d}' % (n, n, n, n)
print(f.format('排名', '学校', '总分', '网址'))
print(h)
for s1 in s:
n1 = n + len('排名') # 对于数字或英文,第1列实际宽度
n2 = n + len('学校') - len(s1['学校']) # 第2列实际宽度
n3 = n + len('总分') # 对于数字或英文,第3列实际宽度
n4 = n + len('网址') # 对于数字或英文,第4列实际宽度
f = '{0:^%d}{1:^%d}{2:^%d}{3:^%d}' % (n1, n2, n3, n4)
print(f.format(s1['排名'], s1['学校'], s1['总分'], s1['网址']))
注: ^ < >分别表示居中对齐,左对齐,右对齐