python语法常用小技巧,持续补充

目录]

  • 1.列表
    • 二维列表取列
    • 列表切片
    • enumerate
    • all, any检查列表元素是否满足条件
    • map, filter
  • 2.字典
    • 字典推导式
    • 使用dict.get()避免KeyError
    • 使用dict.setdefault()设置默认值
    • 使用dict.update()合并两个字典
  • 3.位运算
    • 基础:与,或,非,异或,左移,右移
    • 高效计算二进制1的个数
    • 对某些位反转(0变1,1变0)
    • 判断奇偶
    • 交换两个整数
    • 判断某个整数是否是2的幂

1.列表

二维列表取列

*grid 会将 grid 中的每个列表作为单独的参数传递给 zip() 函数。这样,zip(*grid) 就会返回一个迭代器,其中每个元素都是一个元组,包含来自 grid 中每个列表的相应位置的元素。这相当于将 grid 矩阵转置(将行变为列,将列变为行)

grid = [[1,2,3], [4,5,6]]
col = zip(*grid)

列表切片

my_list = [0, 1, 2, 3, 4, 5]
sub_list = my_list[1:4]  # 输出: [1, 2, 3]

enumerate

for index, value in enumerate(["a", "b", "c"]):
    print(index, value)

all, any检查列表元素是否满足条件

nums = [1, 3, 5, 7]
print(all(n % 2 == 1 for n in nums))  # 输出: True
print(any(n % 2 == 0 for n in nums))  # 输出: False

map, filter

nums = [1, 2, 3, 4, 5]
# 映射nums每个元素的平方
squares = list(map(lambda x: x**2, nums))
# 取squares中的偶数
odd_squares = list(filter(lambda x: x % 2 == 1, squares))

2.字典

字典推导式

squares_dict = {x: x**2 for x in range(10)}

使用dict.get()避免KeyError

my_dict = {"a": 1, "b": 2}
value = my_dict.get("c", "default_value")  # 输出: "default_value"

使用dict.setdefault()设置默认值

my_dict = {"a": 1, "b": 2}
value = my_dict.setdefault("c", 3)  # 输出: 3
print(my_dict)  # 输出: {"a": 1, "b": 2, "c": 3}

使用dict.update()合并两个字典

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict1.update(dict2)
print(dict1)  # 输出: {"a": 1, "b": 3, "c": 4}

3.位运算

基础:与,或,非,异或,左移,右移

注意,位运算的优先级比较低,使用注意优先级的问题

# 与&
# 或|
# 非~
# 异或^
# 左移<<
# 右移>>

高效计算二进制1的个数

a = int('11010010',2)
n = a.bit_count()
# 输出4,即有4个1

对某些位反转(0变1,1变0)

使用异或

a = int('11010010',2)
# 对a的后三位翻转,与即00000111
a ^= int('00000111', 2)
# 输出为11010101

判断奇偶

x & 1,如果结果为1,则x为奇数;如果结果为0,则x为偶数。

交换两个整数

a = a ^ b; b = a ^ b; a = a ^ b,这样可以在不使用额外变量的情况下交换a和b的值。

判断某个整数是否是2的幂

x & (x - 1) == 0,如果结果为真,则x是2的幂。

你可能感兴趣的:(python,开发语言)