python二维列表,每个子列表(元素个数不同)取一个元素进行组合,列出所有可能的情况

比如,已知二维列表[[a,b,c],[d,e],[f]],要求从每个子列表中选出一个元素进行相加,列出所有的组合情况,本题输出为adf,aef,bdf,bef,cdf,cef这6种可能。有很多这样的列表,子列表个数不一定相同,请教怎么用python进行处理

阅读 10.1k
3 个回答
>>> import itertools
>>> s = [['a','b','c'],['d','e'],['f']]
>>> [''.join(i) for i in itertools.product(*s)]
['adf', 'aef', 'bdf', 'bef', 'cdf', 'cef']

不多说,上代码

#!/usr/bin/python

arr = [
    [
        'a', 'b', 'c',
    ],
    [
        'd', 'e',
    ],
    [
        'f', 'g', 'h'
    ]
]



result = []
length = 1
for row in arr:
    length *= len(row) 

# 初始化返回值数组长度
for i in range(0, length):
    result.append([])

for row in arr:
    i = 0
    while i < len(result):
        for letter in row:
            result[i].append(letter)
            i += 1

for row in result:
    print ",".join(row)

当然使用递归了。
那你给的例子,处理整个列表相当于处理 [[d, e], [f]] 的结果(假设是 x) 加上 遍历第一项 [a, b, c],也就是就是最后的结果。至于对 [[d, e], [f]] 的处理,可以继续往下递归

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题