############################################ 数学计算 ############################################# 加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))0b1101print(bin(13))001101print(bin(60))111100############################################ 进制转换 ######################################################################################## 位运算 ############################################# 与,如果两个相应位都为1,则该位的结果为1,否则为0,结果为001100(作用:n&1可以判断奇偶性,结果返回0和1)print(13&60)12# 或,只要两个相应位有一个为1,结果位就为1,结果111101print(13|60)61# 异或,当同位相同时结果为0,不同结果为1,结果为110010print(13^60)49# 作用:^a操作就是将a中的每一位按位逐一进行异或,例如a=4'b1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。# 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。print(100 << 1) # 100乘1次2print(100 << 2) # 100乘2次2print(100 << 3) # 100乘3次2print(100 << 4) # 100乘4次22004008001600# 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数print(100 >> 1) # 100除1次2print(100 >> 2) # 100除2次2print(100 >> 3) # 100除3次2print(100 >> 4) # 100除4次25025126############################################ 位运算 ######################################################################################## 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 defaultdictdict1 = defaultdict(int)dict2 = defaultdict(set)dict3 = defaultdict(str)dict4 = defaultdict(list)dict1[2] = 2dict2[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]: 0dict2[1]: set()dict3[1]:dict4[1]: []dict1[2]: 2dict2[2]: {2}dict3[2]: twodict4[2]: [2]
Counter
Counter中文意思是计数器
# 平常时实现散列表计数colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']dicts = {}for color in colors:if color not in dicts:result[color] = 1else:result[color] += 1print(result){'red': 2, 'blue': 3, 'green': 1}# Counter实现散列表计数from collections import Countercolors = ['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次方
