1. ############################################ 数学计算 ############################################
  2. #
  3. print(3+8)
  4. 11
  5. #
  6. print(3-8)
  7. -5
  8. #
  9. print(3*8)
  10. 24
  11. #
  12. print(3/8)
  13. 0.375
  14. # 取整除 - 返回商的整数部分(向下取整)
  15. print(17//3)
  16. 5
  17. # 取模 - 返回除法的余数
  18. print(17%3)
  19. 2
  20. # 幂,0.5次方就是开方
  21. print(8**0.5)
  22. 2.8284271247461903
  23. # 向下取整数
  24. print(int(0.5))
  25. 0
  26. # 求绝对值
  27. print(abs(-1))
  28. 1
  29. ############################################ 数学计算 ############################################
  30. ############################################ 进制转换 ############################################
  31. # 将一个整数转换为一个十六进制字符串
  32. print(hex(13))
  33. 0xd
  34. # 将一个整数转换为一个八进制字符串
  35. print(oct(13))
  36. 0o15
  37. # 将一个整数转换为一个二进制字符串
  38. print(bin(13))
  39. 0b1101
  40. print(bin(13))
  41. 001101
  42. print(bin(60))
  43. 111100
  44. ############################################ 进制转换 ############################################
  45. ############################################ 位运算 ############################################
  46. # 与,如果两个相应位都为1,则该位的结果为1,否则为0,结果为001100(作用:n&1可以判断奇偶性,结果返回01)
  47. print(13&60)
  48. 12
  49. # 或,只要两个相应位有一个为1,结果位就为1,结果111101
  50. print(13|60)
  51. 61
  52. # 异或,当同位相同时结果为0,不同结果为1,结果为110010
  53. print(13^60)
  54. 49
  55. # 作用:^a操作就是将a中的每一位按位逐一进行异或,例如a=4'b1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。
  56. # 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0
  57. print(100 << 1) # 10012
  58. print(100 << 2) # 10022
  59. print(100 << 3) # 10032
  60. print(100 << 4) # 10042
  61. 200
  62. 400
  63. 800
  64. 1600
  65. # 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
  66. print(100 >> 1) # 10012
  67. print(100 >> 2) # 10022
  68. print(100 >> 3) # 10032
  69. print(100 >> 4) # 10042
  70. 50
  71. 25
  72. 12
  73. 6
  74. ############################################ 位运算 ############################################
  75. ############################################ zip ############################################
  76. strs = ["flower", "flow", "flight"]
  77. # 打包为元组的列表
  78. for i in zip(strs):
  79. print(i)
  80. ('flower',)
  81. ('flow',)
  82. ('flight',)
  83. # zip 相反,*strs 可理解为解压,返回二维矩阵式,并按照最短的去定长度
  84. for i in zip(*strs):
  85. print(i)
  86. ('f', 'f', 'f')
  87. ('l', 'l', 'l')
  88. ('o', 'o', 'i')
  89. ('w', 'w', 'g')
  90. ############################################ zip ############################################

defaultdict

当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,如:
必会方法 - 图1
这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,下面会说
这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:

  1. from collections import defaultdict
  2. dict1 = defaultdict(int)
  3. dict2 = defaultdict(set)
  4. dict3 = defaultdict(str)
  5. dict4 = defaultdict(list)
  6. dict1[2] = 2
  7. dict2[2] = {2}
  8. dict3[2] = 'two'
  9. dict4[2] = [2]
  10. print("dict1[1]: %s" % dict1[1])
  11. print("dict2[1]: %s" % dict2[1])
  12. print("dict3[1]: %s" % dict3[1])
  13. print("dict4[1]: %s" % dict4[1])
  14. print("dict1[2]: %s" % dict1[2])
  15. print("dict2[2]: %s" % dict2[2])
  16. print("dict3[2]: %s" % dict3[2])
  17. print("dict4[2]: %s" % dict4[2])
  18. dict1[1]: 0
  19. dict2[1]: set()
  20. dict3[1]:
  21. dict4[1]: []
  22. dict1[2]: 2
  23. dict2[2]: {2}
  24. dict3[2]: two
  25. dict4[2]: [2]

Counter

Counter中文意思是计数器

  1. # 平常时实现散列表计数
  2. colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
  3. dicts = {}
  4. for color in colors:
  5. if color not in dicts:
  6. result[color] = 1
  7. else:
  8. result[color] += 1
  9. print(result)
  10. {'red': 2, 'blue': 3, 'green': 1}
  11. # Counter实现散列表计数
  12. from collections import Counter
  13. colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
  14. dicts = Counter(colors)
  15. print(dict(dicts))
  16. {'red': 2, 'blue': 3, 'green': 1}

如何判断一个数是否为2的n次幂

  1. 一直除2,看最后是否等于1(最笨的方法)
  2. 转换成2进制,看是否是这个样子的:1,10,100,1000,10000,就是除了最高位是1,其他都是0,或者说只有一个1

image.png

  1. 当我还在为我能想到第二个方法而沾沾自喜的时候,我看到了下面这种更巧妙的方法

4&3—> 100&011=0
7&6—> 0111&0110!=0
8&7—> 1000&0111=0
即 如果 m & (m - 1)==0,则m是2的n次方