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

2024-10-01 07:10:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

根据该数据,可能的值为(例如):

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

以此类推。
我需要的是从这些单个数组中获取所有可能的数据组合,但数据顺序很重要:

  • 来自内部数组的数据只能放置在外部数组的位置上(在上面的示例中,第一个位置上只能放置“A”)

是否有一些Python模块能够处理这个问题(我找到了itertools,但它并不是我所需要的),或者可能有人知道如何做到这一点?你知道吗


Tags: 模块数据示例data顺序数组itertoolsaaaa0
2条回答

我想你需要这里的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']

试试这个:

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']

相关问题 更多 >