Chinaunix首页 | 论坛 | 博客
  • 博客访问: 115371
  • 博文数量: 15
  • 博客积分: 152
  • 博客等级: 入伍新兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-29 17:10
文章分类

全部博文(15)

文章存档

2017年(1)

2015年(1)

2013年(8)

2012年(5)

分类: Python/Ruby

2012-08-10 14:24:18

有一个二维数列a=[['a','b'],['c','d','e'],'f',['g','h','i','j']], 怎么得到list[0], list[1], list[2], list[3]的所有组合情况,如result=[[a, c, f, g], [a, d, f, g], [a, e, f, g], [a, c, f, h], [a, d, f, h] ......]

问题补充:
这个只是一个例子,实际中,a有800多项,每项有2-4个元素。
代码如下:



点击(此处)折叠或打开

  1. a = [['a','b'],['c','d','e'],'f',['g','h','i','j']]
  2.         
  3. anum = [len(i) for i in a]
  4. x = []
  5. for i in range(int(''.join(map(str,anum)))):
  6.     for j in zip(list(str(i).zfill(len(a))),anum):
  7.         if int(j[0]) >= j[1]:
  8.             break
  9.     else:
  10.         x.append(list(map(int,list(str(i).zfill(len(anum))))))
  11. c = []
  12. for i in x:
  13.     temp = []
  14.     for j,k in enumerate(i):
  15.         temp.append(a[j][k])
  16.     else:
  17.         c.append(temp)
  18. print(c)

上边这段是先写的代码,缺点是执行效率较低,同时只能用于每个字列表的长度小于10的情况,适用范围较小。
重写,以下是新代码,有点模仿数字进制的意思。

点击(此处)折叠或打开

  1. a = [['a','b'],['c','d','e'],'f',['g','h','i','j']]
  2. anum = [len(i) for i in a]
  3. exec('product =' + '*'.join(map(str,anum)))
  4. c = []
  5. for i in range(product):
  6.     t = i
  7.     c.append([])
  8.     for j in range(len(anum)):
  9.         c[i].append((a[j][t%anum[j]]))
  10.         t //= anum[j]
  11. print(c)

阅读(2383) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:求最大的‘镜子’组

给主人留下些什么吧!~~