逻辑运算
变量值交换:a, b = b, a
运算符优先级:先括号 P,再指数 E,然后乘除 MD,最后加减 AS
链式比较:5 < 10 < 5*10 < 100 -> True
三目运算:text = '男' if gender == 'male' else '女'
列表与字典
列表反转:a_list[::-1]
字典取值:a_dict.get("name", "default")
字典合并:x.update(y)
,{**x,**y}
,x|y
字典推导式:d = {key: value for (key, value) in iterable}
字典排序:sorted(a_dict.items(), key=lambda x: x[1], reverse=True)
迭代字典时节省内存:
d = {i: i * 2 for i in xrange(10000000)}
for key, value in d.iteritem():
print("{0} = {1}".format(key, value))
# 构建迭代器,避免完整数据一次性都加载到内存
字符串处理
移除多行字符串每一行的前导空格:from textwrap import dedent;dedent(text)
字符串转日期:import datetime; datetime.datetime.strptime("2024-01-01 23:59:59", "%Y-%m-%d %H:%M:%S")
ASCII 码转换
ord("a"), chr(97)
# 97, a
字符串统计字符出现的次数
"abc33aef".count("a") # 单个字符的次数统计
from collections import Counter
Counter("abc33aef") # 所有字符的次数统计(返回结果为dict格式)
# Counter({'a': 2, '3': 2, 'b': 1, 'c': 1, 'e': 1, 'f': 1})
F 字符串中浮点数的格式化与输出
f"小数点后保留2位有效数字: {1 / 3:.2f}"
# '小数点后保留2位有效数字: 0.33'
f"计算面积,保留5位有效数字 = {math.pi * 10.203**2:,.5g}"
# '计算面积,保留5位有效数字 = 327.04'
f"百分比格式: {0.1256:.1%}"
# 百分比格式: 12.6%"
f"科学计数法: {0.00012345:.3e}"
# 科学计数法: '1.234e-04'
循环结构
为循环语句添加进度条:
from tqdm import tqdm
from tqdm._tqdm_notebook import tqdm_notebook
[i**2 for i in tqdm(range(10))] # 普通循环添加进度条
[i**2 for i in tqdm_notebook(range(10))] # notebook 内循环添加进度条
tqdm.pandas() # 调用pandas的apply函数时,添加进度条
df['new_column'] = df['target_column'].progress_apply(func)
在循环中获取 index 索引
for index, c in enumerate([a,b,c], start=1):
print(index, c)
# 1 a
# 2 b
# 3 c
遍历目录(包括子目录)下的所有文件
f_path = "/opt/"
files = [f for f in os.listdir(f_path) \
if os.path.isfile(os.path.join(f_path, f))]
函数、类与实例
函数映射:map(lambda x: x * x, [1, 2, 3, 4]))
错误处理与重试:
from retry import retry
@retry(delay=1, tries=4) # 尝试重复4次,每次间隔1s
def demo():
print('错误') # 函数内容略
raise