如何增量创建数字和字符串的组合?



我有以下数字:[0, 1, 2, 3, 4, 5, 6]和以下命令['open', 'start', 'finish', 'quit', 'destroy'],我想创建一个string,它是所有这些的组合,总是以字符串开始,以数字结束:

例子:

open0
open1

一个要求是字符串后面可以跟数字数组中所有数字的组合,但不能跟字符串数组的组合:

open562
start12
start12345
//openstart //not a requirement

另一个要求是它总是string然后number(s)然后string然后number(s)

open0start0
open123start3
finish0start123destroy6

我过去问过一个类似的问题,但我不能从那里转移到我现在的目标。

其中一个解决方案涉及使用itertools

from itertools import permutations
from pprint import pprint
data = range(6)
def inc_perms(it):
for i, _ in enumerate(data):
yield from permutations(data,  i)
pprint(list(inc_perms(data)))

但是我不能从这里开始添加字符串。

edit: tried to澄清需求

第一部分使用itertools.product:

nums = [0, 1, 2, 3, 4, 5, 6]
strgs = ['open', 'start', 'finish', 'quit', 'destroy']
from itertools import product
list(map(''.join, product(strgs, map(str, nums))))

输出:

['open0',
'open1',
'open2',
'open3',
'open4',
'open5',
'open6',
'start0',
'start1',
...
]

第二部分只是它的一个变体,您可以使用前面的输出作为新的输入。警告产品将很快增加输出的大小,因此您可能希望首先对数据的随机样本进行子集。

如果您想要一些随机的东西,您可以使用random函数来生成输出字符串,如

def random_select(input,n):
a = [int(i) for i in str(random.random())[2:n*2+2]]
result = ""
while(a):
i = a.pop() % len(input)
j = a.pop() % len(input[i])
result += str(input[i][j])
return result
a = [0, 1, 2, 3, 4, 5, 6]
b = ['open', 'start', 'finish', 'quit', 'destroy']
print(random_select((a,b),5))
# note the first parameter is a tuple of your two or more arrays
# these second parameter is the number of elements you want to get the two arrays
# you can use a random number for the second parameter as well
# like int(random.random()*10)

最新更新