Python - 从数组的数组中获取数据组合
Python - get combination of data from array of arrays
我有一个数组,其中包含其他数组,这些数组在给定位置包含可能的数据值。示例:
data = [['A'],['A','B'],['A','B'],['A','B','D'],['0','2']]
根据该数据,可能的值是(例如):
"AAAA0" # (00000)
"AAAA2" # (00001)
"AAAD0" # (00020)
等等。
我需要的是从这些单个数组中获取所有可能的数据组合,但数据的顺序很重要:
- 来自内部数组的数据只能放在它在外部数组中的位置(在上面的例子中,第一个位置只能放置'A')
是否有一些 Python 模块可以处理这个问题(我找到了 itertools,但它并不完全符合我的需要),或者有人知道如何做到这一点?
试试这个:
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']
我想你需要这里的 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']]
根据该数据,可能的值是(例如):
"AAAA0" # (00000)
"AAAA2" # (00001)
"AAAD0" # (00020)
等等。
我需要的是从这些单个数组中获取所有可能的数据组合,但数据的顺序很重要:
- 来自内部数组的数据只能放在它在外部数组中的位置(在上面的例子中,第一个位置只能放置'A')
是否有一些 Python 模块可以处理这个问题(我找到了 itertools,但它并不完全符合我的需要),或者有人知道如何做到这一点?
试试这个:
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']
我想你需要这里的 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']