Python 3.x 逐位运算
这是第一次使用python中的位操作,而且(对我来说)语法也很奇怪 对于上下文,set_只是一个由4个字母组成的列表 这里有一点需要解开。首先,我从未见过Python 3.x 逐位运算,python-3.x,bitwise-operators,bit-shift,Python 3.x,Bitwise Operators,Bit Shift,这是第一次使用python中的位操作,而且(对我来说)语法也很奇怪 对于上下文,set_只是一个由4个字母组成的列表 这里有一点需要解开。首先,我从未见过[set(),set()]。我一定是使用了错误的关键字,因为我在文档中找不到它。看起来它在蟒蛇中创造了一个矩阵,但我不能肯定。第二,虽然部分[i&1]是一个切片操作,但我不完全确定为什么需要按位操作。例如,0&1应该是1,1&1应该是0(携带1),那么二进制10(或十进制中的2)?最后,最后一个按位操作完全令人困惑。我相信右移等于除以二(我希望
[set(),set()]
。我一定是使用了错误的关键字,因为我在文档中找不到它。看起来它在蟒蛇中创造了一个矩阵,但我不能肯定。第二,虽然部分[i&1]
是一个切片操作,但我不完全确定为什么需要按位操作。例如,0&1应该是1,1&1应该是0(携带1),那么二进制10(或十进制中的2)?最后,最后一个按位操作完全令人困惑。我相信右移等于除以二(我希望如此),但为什么I>>=1
?我不知道该怎么解释。任何指导都将不胜感激
我从未见过[set(),set()]
这并不是什么有趣的事情,只是一个包含两个新集合的列表。您已经看到了,因为它不是新语法。只是一个列表和构造函数
parts[i&1]
这将测试i
的最低有效位,并选择部分[0]
(如果lsb为0)或部分[1]
(如果lsb为1)。没有什么比切片更奇特的了,只是将简单的旧索引放入列表中。你得到的东西是一个集合,.add(item)
做了一件显而易见的事情:向选中的集合添加一些东西
但是为什么i>>=1
?我不知道该怎么解释
将i
中的位向右移动一个位置,放下旧的lsb,保留符号。有点像这样
当然,在Python中有任意精度的整数,所以它需要多长,而不是8位
对于正数,有关复制符号的部分无关紧要
您可以将右移1视为地板除以2(这与截断不同,负数向负无穷大舍入,例如-1>>1=-1
),但这种解释通常更复杂
无论如何,这里使用的方法只是一种循环通过i
位的方法,从低到高逐个测试它们,但不是改变它测试的位,而是每次将它想要测试的位移动到相同的位置
我从未见过[set(),set()]
这并不是什么有趣的事情,只是一个包含两个新集合的列表。您已经看到了,因为它不是新语法。只是一个列表和构造函数
parts[i&1]
这将测试i
的最低有效位,并选择部分[0]
(如果lsb为0)或部分[1]
(如果lsb为1)。没有什么比切片更奇特的了,只是将简单的旧索引放入列表中。你得到的东西是一个集合,.add(item)
做了一件显而易见的事情:向选中的集合添加一些东西
但是为什么i>>=1
?我不知道该怎么解释
将i
中的位向右移动一个位置,放下旧的lsb,保留符号。有点像这样
当然,在Python中有任意精度的整数,所以它需要多长,而不是8位
对于正数,有关复制符号的部分无关紧要
您可以将右移1视为地板除以2(这与截断不同,负数向负无穷大舍入,例如-1>>1=-1
),但这种解释通常更复杂
无论如何,这里使用的方法只是一种循环通过i
的位的方法,从低到高逐个测试它们,但不是改变它测试的位,而是每次将它想要测试的位移动到相同的位置。[set(),set()]
创建一个由两个空集组成的列表
0&1是0,1&1是1。位运算中没有进位<因此,当i
为偶数时,code>parts[i&1]指第一组,当i
为奇数时,指第二组
i>=1
右移一位(实际上等于除以二),然后将结果分配回i
。这与使用i+=1
增加变量的基本概念相同
内部循环的作用是根据i
的位,将\u集的元素划分为两个子集。如果外部循环中的限制只是2**len(_set)
,那么代码将生成所有可能的分区。但是,由于这个限制被二除,只有一半的可能分区被生成——如果没有更多的上下文,我猜不出这有什么意义。[set(),set()]
创建了一个由两个空集组成的列表
0&1是0,1&1是1。位运算中没有进位<因此,当i
为偶数时,code>parts[i&1]
指第一组,当i
为奇数时,指第二组
i>=1
右移一位(实际上等于除以二),然后将结果分配回i
。这与使用i+=1
增加变量的基本概念相同
内部循环的作用是根据
i
的位,将\u集的元素划分为两个子集。如果外部循环中的限制只是2**len(_set)
,那么代码将生成所有可能的分区。但是,由于该限制被二除,只有一半可能的分区被生成——如果没有更多的上下文,我猜不出这有什么意义。哇,太棒了!非常感谢你!一个障碍似乎是使用位操作来完成事情,而我通常会尝试将事情保持在十进制,让位操作在引擎盖下发生,并且不在视线范围内。