如下所示:
def sub(arr):
finish=[]
size = len(arr)
end = 1 << size #end=2**size
for index in range(end): # shift index
array = []
for j in range(size):
# 00,01,10,11 is symmetrical
if (index >> j) % 2: # this result is 1, so do not have to write ==
array.append(arr[j])
# print(array)
finish.append(array)
return finish
移位运算符 << 的优先级大于赋值 =
用01二进制串决定数组中的每个数字是否输出
[]=000;[1]=100;[2]=010;[3]=001;[1,2]=110;[1,2,3]=111…
如何实现?
第一个循环实现的是01串的遍历,eg.由000到111
第二个循环实现的是数组的遍历,eg.将000与数组中的每一位数字做判断
在if语句中,用到了向右移位,由于二进制串是对称的,所以我们可以将01串从后向前与数组中的每一位数字做判断。
eg.001与100对称,110与011对称…
在001中,最后一位是1,说明数组中3需要输出
但是在我们遍历数组的时候,先遇到的是1与arr[0],不过由于对称性,这种情况其实与在100中,后遇到的是1与arr[2]
以上这篇python实现输出一个序列的所有子序列示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。
Powered By python教程网 鲁ICP备18013710号
python博客 - 小白学python最友好的网站!