Python
基础
数运算
x // y
两数相除取整数
x % y
两数相除取余数
abs(x)
取绝对值
int()
转换成整数
float()
转换成浮点数
divmod(x, y)
输出两数相除整数与余数
x ** y
x的y次方
pow(x, y)
x的y次方
pow(x, y, z)
将z与x的y方相除,输出余数
填充
x.center(weight, y)
填充空格或y(如果有的话,下同),字符串居中,有
x.ljust(weight, y)
左填充空格
x.rjust(weight, y)
右填充空格
x.zfill(weight)
左填充0
函数
global 语句
原始:
a = 100
def func():
a = 200
print("'a' in func" ,a)
测试一下:
>>> func()
'a' in func 200
>>> print(a)
100
可以看到,此时a
变量在func
函数内的值变为了200,但其全局变量值仍然为100。
那么,如何在函数内部修改一个变量的全局变量呢?
a = 100
def func():
global a
a = 200
print("'a' in func" ,a)
测试一下:
>>> print(a)
100
>>> func()
'a' in func 200
>>> print(a)
200
调用函数前,a
的全局变量为100,调用函数后,a
的全局变量被覆盖为200。
嵌套函数 与 nonlocal语句
a = 0
def funcA():
a = 100
def funcB():
a = 200
print("In funcB,a =", a)
funcB()
print("In funcA,a =", a)
run:
>>> funcA()
In funcB,a = 200
In funcA,a = 100
>>> print(a)
0
试图使用nonlocal
语句在funcB
修改funcA
中a
的局部变量但不影响到全局:
a = 0
def funcA():
a = 100
def funcB():
nonlocal a
a = 200
print("In funcB,a =", a)
funcB()
print("In funcA,a =", a)
run:
>>> funcA()
In funcB,a = 200
In funcA,a = 200
>>> print(a)
0
map(sum, accounts)
map()
函数:将指定的函数应用于可迭代对象的每个元素sum
函数:计算列表元素的总和- 这行代码的效果:对每个客户的账户列表求和
- 示例应用过程:
输入:accounts = [[1,2,3], [4,5], [6]]
map(sum, accounts) 结果 → [sum([1,2,3]), sum([4,5]), sum([6])] = [6, 9, 6]
位运算
bit_length() 与 bit_count()
bit_length()
- 获取二进制表示的最小位数
功能
返回表示该整数所需的最少二进制位数(不包括符号位和前导零)。
特殊处理:0
的位长为 0
示例
num = 5 # 二进制: 101
print(num.bit_length()) # 输出: 3(需要3位表示)
num = 10 # 二进制: 1010
print(num.bit_length()) # 输出: 4
num = 0
print(num.bit_length()) # 输出: 0
num = -7 # 二进制: ...1111111111111001(补码)
print(num.bit_length()) # 输出: 3(与正数7相同)
bit_count()
(Python 3.10+) - 计算二进制中1的个数
功能
返回整数二进制表示中 值为1的位的数量(也称为”汉明重量”或”population count”)。
示例
num = 5 # 二进制: 101
print(num.bit_count()) # 输出: 2
num = 10 # 二进制: 1010
print(num.bit_count()) # 输出: 2
num = 0
print(num.bit_count()) # 输出: 0
num = -1 # 二进制: 所有位均为1
print(num.bit_count()) # 输出: 无限?实际返回一个非常大的数
负数处理
对于负数,Python 使用无限位的二进制补码表示:
-1 的二进制表示 → ...1111111111111111(所有位为1)
-5 的二进制表示 → ...1111111111111011
因此 bit_count()
对负数的行为:
- 对负数返回其补码表示中1的数量
- 因为使用无限位表示,负数会返回非常大的数字
库
from collections import defaultdict
freq = defaultdict(int)
使用 defaultdict(int)
自动初始化不存在的键为 0