Python - 从数组数组中获取数据组合

时间:2016-07-31 22:43:21

标签: python arrays combinations

我有一个数组,其中包含其他数组,这些数组在给定位置保存可能的数据值。示例:

data = [['A'],['A','B'],['A','B'],['A','B','D'],['0','2']]  

根据这些数据,可能的值是(例如):

"AAAA0"  # (00000)  
"AAAA2"  # (00001)  
"AAAD0"  # (00020)  

等等。
我需要的是从这些单个数组获得所有可能的数据组合,但数据顺序很重要:

  • 来自内部数组的数据只能放在外部数组中的位置(上例中仅在第一个位置' A'可以放置)

是否有一些Python模块可以处理这个问题(我找到了itertools,但它并不完全符合我的要求),或者有人知道如何做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为你需要itertools.product

import itertools
[''.join(p) for p in itertools.product(*data)]

#['AAAA0',
# 'AAAA2',
# 'AAAB0',
# 'AAAB2',
# 'AAAD0',
# 'AAAD2',
# 'AABA0',
# 'AABA2',
# 'AABB0',
# 'AABB2',
# 'AABD0',
# 'AABD2',
# 'ABAA0',
# 'ABAA2',
# 'ABAB0',
# 'ABAB2',
# 'ABAD0',
# 'ABAD2',
# 'ABBA0',
# 'ABBA2',
# 'ABBB0',
# 'ABBB2',
# 'ABBD0',
# 'ABBD2']

答案 1 :(得分:0)

试试这个:

data = [['A'], ['A','B'], ['A','B'], ['A','B','D'], ['0','2']]
size = 5

def rec(cur):
    if len(cur) == size:
        print(cur)
        return

    for x in data[len(cur)]:
        rec(cur + [x])

rec([])

输出:

['A', 'A', 'A', 'A', '0']
['A', 'A', 'A', 'A', '2']
['A', 'A', 'A', 'B', '0']
['A', 'A', 'A', 'B', '2']
['A', 'A', 'A', 'D', '0']
['A', 'A', 'A', 'D', '2']
['A', 'A', 'B', 'A', '0']
['A', 'A', 'B', 'A', '2']
['A', 'A', 'B', 'B', '0']
['A', 'A', 'B', 'B', '2']
['A', 'A', 'B', 'D', '0']
['A', 'A', 'B', 'D', '2']
['A', 'B', 'A', 'A', '0']
['A', 'B', 'A', 'A', '2']
['A', 'B', 'A', 'B', '0']
['A', 'B', 'A', 'B', '2']
['A', 'B', 'A', 'D', '0']
['A', 'B', 'A', 'D', '2']
['A', 'B', 'B', 'A', '0']
['A', 'B', 'B', 'A', '2']
['A', 'B', 'B', 'B', '0']
['A', 'B', 'B', 'B', '2']
['A', 'B', 'B', 'D', '0']
['A', 'B', 'B', 'D', '2']