1. 程式人生 > 程式設計 >python實現輸出一個序列的所有子序列示例

python實現輸出一個序列的所有子序列示例

如下所示:

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實現輸出一個序列的所有子序列示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。