本文是我编程时遇到的一些Python小技巧,总结出来,不定期更新~
- 二进制中的1或0数量
# bin(n)的结果是以'0b'开头的字符串
bin(n).count('1') #1的数量
bin(n).count('0')-1 #0的数量
- 字母转数字
ord('a') #97
- 使用位运算字母大小写转换
def change(a):
a = ord(a) ^ ord(' ')
return chr(a)
# a='f', change(a)='F'
# a='F', change(a)='f'
- 判断一个数的二进制是否为1、0交替
# 一个数如果是1、0交替,那么它与自身右移一位后异或后并加一
# 结果应该只有一位1,其他位都是0
def check_10switch(n):
tmp = (n ^ (n >>1)) + 1
return bin(tmp).count('1')
- 不使用+-实现两个整数之和
def getSum(a, b):
while b:
c = a&b
a ^= b
b = c<<1
return a
- collections.Counter().elements
先看看官方解释:
elements() is one of the functions of Counter class, when invoked on the Counter object will return an itertool of all the known elements in the Counter object.
elements()函数是Counter下边的方法,被调用后会返回一个迭代器,迭代器里是一个Counter对象的全部元素。
看代码更好理解:
from collections import Counter
a_o = [1,1,1,2,2]
a = Counter(a_o)
print(a) #Counter({1: 3, 2: 2})
print(a.elements()) #<itertools.chain object at 0x101016588>
print(list(a.elements())) #[1,1,1,2,2]
print(list(a.elements()) == a_o) #True