Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例


Posted in Python onNovember 23, 2017

本文实例讲述了Python2.7基于笛卡尔积算法实现N个数组的排列组合运算。分享给大家供大家参考,具体如下:

说明:本人前段时间遇到的求n个数组的所有排列组合的问题,发现笛卡尔积算法可以解决,但是网上搜索的只有Java版本的实现,于是自己试着用python实现,由于新手代码不太规范。

代码:本人封装了一个类Cartesian(笛卡尔),其中封装了变量和方法:

1.变量

datagroup : 表示n个list(python 中的list与其他编程中的数组定义类似)的集合,即一个二维数组
counterIndex:datagroup反向下标值
counter : 用来记录当前datagroup中每一个数组输出的下标,初始全为0,因为从第一个开始输出

2.方法

countlength : 计算数组长度,即计算n的具体值
handle :处理datagoroup二维数组中每一个一维数组输出的下标值
assemble : 对datagoroup中的n个一维数组中的每一元素进行排列组合输出

# -*- coding:utf-8 -*-
# python 实现N个数组的排列组合(笛卡尔积算法)
class Cartesian():
  # 初始化
  def __init__(self, datagroup):
    self.datagroup = datagroup
    # 二维数组从后往前下标值
    self.counterIndex = len(datagroup)-1
    # 每次输出数组数值的下标值数组(初始化为0)
    self.counter = [0 for i in range(0, len(self.datagroup))]
  # 计算数组长度
  def countlength(self):
    i = 0
    length = 1
    while(i < len(self.datagroup)):
      length *= len(self.datagroup[i])
      i += 1
    return length
  # 递归处理输出下标
  def handle(self):
    # 定位输出下标数组开始从最后一位递增
    self.counter[self.counterIndex]+=1
    # 判断定位数组最后一位是否超过长度,超过长度,第一次最后一位已遍历结束
    if self.counter[self.counterIndex] >= len(self.datagroup[self.counterIndex]):
      # 重置末位下标
      self.counter[self.counterIndex] = 0
      # 标记counter中前一位
      self.counterIndex -= 1
      # 当标记位大于等于0,递归调用
      if self.counterIndex >= 0:
        self.handle()
      # 重置标记
      self.counterIndex = len(self.datagroup)-1
  # 排列组合输出
  def assemble(self):
    length = self.countlength()
    i = 0
    while(i < length):
      attrlist = []
      j = 0
      while(j<len(self.datagroup)):
        attrlist.append(self.datagroup[j][self.counter[j]])
        j += 1
      print attrlist
      self.handle()
      i += 1

测试:

注:测试代码中我只选取了长度为3的二维数组

if __name__ == "__main__":
  # 构造二维数组
  datagroup = [['aa1', ], ['bb1', 'bb2'], ['cc1', 'cc2', 'cc3']]
  # 创建cartesian对象
  cartesian = Cartesian(datagroup)
  cartesian.assemble()

输出结果:

Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例

备注:此算法实现用python2.7版本

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
为Python的web框架编写前端模版的教程
Apr 30 Python
python使用htmllib分析网页内容的方法
May 08 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
python实现rsa加密实例详解
Jul 19 Python
机器学习10大经典算法详解
Dec 07 Python
用Python实现KNN分类算法
Dec 22 Python
python如何去除字符串中不想要的字符
Jul 05 Python
Python编程中flask的简介与简单使用
Dec 28 Python
python实现QQ空间自动点赞功能
Apr 09 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
python str字符串转uuid实例
Mar 03 Python
深入理解Python3 内置函数大全
Nov 23 #Python
Python内置函数delattr的具体用法
Nov 23 #Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 #Python
Python3 操作符重载方法示例
Nov 23 #Python
Python3安装Scrapy的方法步骤
Nov 23 #Python
Python 和 JS 有哪些相同之处
Nov 23 #Python
深入理解Python分布式爬虫原理
Nov 23 #Python
You might like
由php if 想到的些问题
2008/03/22 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
删除重复数据的算法
2006/11/23 Javascript
javascript URL锚点取值方法
2009/02/25 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
高质量Python代码编写的5个优化技巧
2017/11/16 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python常见的pandas用法demo示例
2019/03/16 Python
python3获取当前目录的实现方法
2019/07/29 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
python批量生成条形码的示例
2020/10/10 Python
中国电视购物:快乐购
2017/02/04 全球购物
艺术用品:Arteza
2018/11/25 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
劳动之星获奖感言
2014/02/01 职场文书
教师网络培训感言
2014/03/09 职场文书
事假请假条范文
2014/04/11 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
小学清明节活动总结
2014/07/04 职场文书
学前教育专业求职信
2014/09/02 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
学校就业保障协议书
2019/06/24 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python