有一个二维数列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个元素。
代码如下:- a = [['a','b'],['c','d','e'],'f',['g','h','i','j']]
-
- anum = [len(i) for i in a]
- x = []
- for i in range(int(''.join(map(str,anum)))):
- for j in zip(list(str(i).zfill(len(a))),anum):
- if int(j[0]) >= j[1]:
- break
- else:
- x.append(list(map(int,list(str(i).zfill(len(anum))))))
- c = []
- for i in x:
- temp = []
- for j,k in enumerate(i):
- temp.append(a[j][k])
- else:
- c.append(temp)
- print(c)
上边这段是先写的代码,缺点是执行效率较低,同时只能用于每个字列表的长度小于10的情况,适用范围较小。
重写,以下是新代码,有点模仿数字进制的意思。
- a = [['a','b'],['c','d','e'],'f',['g','h','i','j']]
- anum = [len(i) for i in a]
- exec('product =' + '*'.join(map(str,anum)))
- c = []
- for i in range(product):
- t = i
- c.append([])
- for j in range(len(anum)):
- c[i].append((a[j][t%anum[j]]))
- t //= anum[j]
- print(c)
阅读(2383) | 评论(0) | 转发(0) |