列表推导式中嵌套if之查漏补缺及了解位运算

2019年7月15日

一.关于列表推导式

  1. 列表推导式中嵌套if之一:

[None if i & 1 else i for i in range(101)]

之前天真的以为列表推导式中if和else的嵌套之有一种,没想到.....查漏补缺了

  1. 列表推导式中嵌套if之二:

[i for i in range(101) if i & 1]

这样程序就不用考虑else情况下还要向列表中添加无效数据的场景了


二.初步了解位运算

python中的位运算符

  1. 按位与(&):如果两个二进位都为1,则该位结果为1,否则为0
  2. 按位与(|):只要有一个为1,则结果为1,否则为0
  3. 按位异或(^): 两个二进制位相异为1(即两个二进位要相反),否则为0
    (任意数和自身异或结果为0;0和任意数异或结果还是其本身)
  4. 取反(~) : 对数据的每个二进制位取反,即把1变成0,把0变成1
  5. 左移动:运算数的各二进位全部向左移若干位,左移n位相当与乘以2的n次方
  6. 右移动:运算数的各二进位全部向右移若干位,右移n位相当于除以2的n次方

小技巧:

  • 偶数与1作 与(&) 运算,结果都为0.奇数都为1.
  • 任何数自身与自身异或结果为0,0与任何数异或结果都为任何数.
#寻找数据列表中的独一无二
def find_only(x):
    result = 0
    for i in x:
        result ^= i
        print(result)
    print(result)
  • 左移n位相当于原数乘以2的n次方。右移n位相当于除以2的n次方(负数暂无考究).
  • 位运算 << >> 比乘除运算 * / 执行速度要快.

今日暂且这些
posted @ 2019-07-20 16:22  why72  阅读(310)  评论(0编辑  收藏  举报