############################################ 数学计算 ############################################
# 加
print(3+8)
11
# 减
print(3-8)
-5
# 乘
print(3*8)
24
# 除
print(3/8)
0.375
# 取整除 - 返回商的整数部分(向下取整)
print(17//3)
5
# 取模 - 返回除法的余数
print(17%3)
2
# 幂,0.5次方就是开方
print(8**0.5)
2.8284271247461903
# 向下取整数
print(int(0.5))
0
# 求绝对值
print(abs(-1))
1
############################################ 数学计算 ############################################
############################################ 进制转换 ############################################
# 将一个整数转换为一个十六进制字符串
print(hex(13))
0xd
# 将一个整数转换为一个八进制字符串
print(oct(13))
0o15
# 将一个整数转换为一个二进制字符串
print(bin(13))
0b1101
print(bin(13))
001101
print(bin(60))
111100
############################################ 进制转换 ############################################
############################################ 位运算 ############################################
# 与,如果两个相应位都为1,则该位的结果为1,否则为0,结果为001100(作用:n&1可以判断奇偶性,结果返回0和1)
print(13&60)
12
# 或,只要两个相应位有一个为1,结果位就为1,结果111101
print(13|60)
61
# 异或,当同位相同时结果为0,不同结果为1,结果为110010
print(13^60)
49
# 作用:^a操作就是将a中的每一位按位逐一进行异或,例如a=4'b1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。
# 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
print(100 << 1) # 100乘1次2
print(100 << 2) # 100乘2次2
print(100 << 3) # 100乘3次2
print(100 << 4) # 100乘4次2
200
400
800
1600
# 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
print(100 >> 1) # 100除1次2
print(100 >> 2) # 100除2次2
print(100 >> 3) # 100除3次2
print(100 >> 4) # 100除4次2
50
25
12
6
############################################ 位运算 ############################################
############################################ zip ############################################
strs = ["flower", "flow", "flight"]
# 打包为元组的列表
for i in zip(strs):
print(i)
('flower',)
('flow',)
('flight',)
# 与 zip 相反,*strs 可理解为解压,返回二维矩阵式,并按照最短的去定长度
for i in zip(*strs):
print(i)
('f', 'f', 'f')
('l', 'l', 'l')
('o', 'o', 'i')
('w', 'w', 'g')
############################################ zip ############################################
defaultdict
当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,如:
这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,下面会说
这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:
from collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] = 2
dict2[2] = {2}
dict3[2] = 'two'
dict4[2] = [2]
print("dict1[1]: %s" % dict1[1])
print("dict2[1]: %s" % dict2[1])
print("dict3[1]: %s" % dict3[1])
print("dict4[1]: %s" % dict4[1])
print("dict1[2]: %s" % dict1[2])
print("dict2[2]: %s" % dict2[2])
print("dict3[2]: %s" % dict3[2])
print("dict4[2]: %s" % dict4[2])
dict1[1]: 0
dict2[1]: set()
dict3[1]:
dict4[1]: []
dict1[2]: 2
dict2[2]: {2}
dict3[2]: two
dict4[2]: [2]
Counter
Counter中文意思是计数器
# 平常时实现散列表计数
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
dicts = {}
for color in colors:
if color not in dicts:
result[color] = 1
else:
result[color] += 1
print(result)
{'red': 2, 'blue': 3, 'green': 1}
# Counter实现散列表计数
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
dicts = Counter(colors)
print(dict(dicts))
{'red': 2, 'blue': 3, 'green': 1}
如何判断一个数是否为2的n次幂
- 一直除2,看最后是否等于1(最笨的方法)
- 转换成2进制,看是否是这个样子的:1,10,100,1000,10000,就是除了最高位是1,其他都是0,或者说只有一个1
- 当我还在为我能想到第二个方法而沾沾自喜的时候,我看到了下面这种更巧妙的方法
4&3—> 100&011=0
7&6—> 0111&0110!=0
8&7—> 1000&0111=0
即 如果 m & (m - 1)==0,则m是2的n次方