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

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的幂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hilbob

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值