python实现输出一个序列的所有子序列示例

yipeiwu_com6年前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实现输出一个序列的所有子序列示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

pytorch之ImageFolder使用详解

pytorch之ImageFolder使用详解

pytorch之ImageFolder torchvision已经预先实现了常用的Dataset,包括前面使用过的CIFAR-10,以及ImageNet、COCO、MNIST、LSUN等...

老生常谈Python startswith()函数与endswith函数

函数:startswith() 作用:判断字符串是否以指定字符或子字符串开头 一、函数说明 语法:string.startswith(str, beg=0,end=len(string)...

python list中append()与extend()用法分享

1. 列表可包含任何数据类型的元素,单个列表中的元素无须全为同一类型。 2.  append() 方法向列表的尾部添加一个新的元素。只接受一个参数。3.  exten...

python使用正则表达式替换匹配成功的组

正则表达式简介 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)...

Atom的python插件和常用插件说明

python: simplified-chinese-menu:中文汉化(英文差的) 代码高亮:Atom自带 自动补全:autocomplete-python 语法检查:linter-f...