python排列组合⼆维数组_Python2.7基于笛卡尔积算法实现N
个数组的排列组合运算。。。
本⽂实例讲述了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
# ⼆维数组从后往前下标值
# 每次输出数组数值的下标值数组(初始化为0)
# 计算数组长度
def countlength(self):
i = 0
length = 1
while(i < len(self.datagroup)):
length *= len(self.datagroup[i])
i += 1
return length
# 递归处理输出下标
def handle(self):
# 定位输出下标数组开始从最后⼀位递增
# 判断定位数组最后⼀位是否超过长度,超过长度,第⼀次最后⼀位已遍历结束
unterIndex] >= len(self.unterIndex]): # 重置末位下标
# 标记counter中前⼀位
# 当标记位⼤于等于0,递归调⽤
unterIndex >= 0:
self.handle()
# 重置标记
# 排列组合输出
def assemble(self):
length = untlength()
i = 0
while(i < length):
attrlist = []
j = 0
while(j
attrlist.append(self.datagroup[j][unter[j]])
j += 1
print attrlist
self.handle()
i += 1
测试:
注:测试代码中我只选取了长度为3的⼆维数组
if __name__ == "__main__":
# 构造⼆维数组
datagroup = [['aa1', ], ['bb1', 'bb2'], ['cc1', 'cc2', 'cc3']]
# 创建cartesian对象
cartesian = Cartesian(datagroup)
python新手代码画图
cartesian.assemble()
输出结果:
备注:此算法实现⽤python2.7版本
希望本⽂所述对⼤家Python程序设计有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论