2024-05-17 02:54:01 发布
网友
我正在尝试生成一个模式,它的词汇表只能由'A', 'B', 'C', 'D' or '*'组成,字符可以重复任意次数,但关键是生成的模式必须至少有一个字母。你知道吗
'A', 'B', 'C', 'D' or '*'
我尝试了随机模块,这是我最接近我想要的:
random.sample(set(vocabulary), 5) Out[30]: ['A', 'D', '*', 'B', 'C']
理想情况下,我希望看到如下输出:
A*** ABAB ABC*
等等
我该怎么办?你知道吗
实际上,如果您想要列表元素的乘积,可以使用^{}:
>>> from itertools import product >>> voc=['A', 'B', 'C', 'D', '*'] >>> for pro in product(voc,repeat=5): ... print ''.join(pro) *AAAA *AAAB *AAAC *AAAD *AAA* *AABA *AABB *AABC . .
如果你只想得到相等的子集,你可以使用下面的列表,例如:
>>> voc=['C', 'D', '*'] >>> list(product(voc,repeat=3)) [('C', 'C', 'C'), ('C', 'C', 'D'), ('C', 'C', '*'), ('C', 'D', 'C'), ('C', 'D', 'D'), ('C', 'D', '*'), ('C', '*', 'C'), ('C', '*', 'D'), ('C', '*', '*'), ('D', 'C', 'C'), ('D', 'C', 'D'), ('D', 'C', '*'), ('D', 'D', 'C'), ('D', 'D', 'D'), ('D', 'D', '*'), ('D', '*', 'C'), ('D', '*', 'D'), ('D', '*', '*'), ('*', 'C', 'C'), ('*', 'C', 'D'), ('*', 'C', '*'), ('*', 'D', 'C'), ('*', 'D', 'D'), ('*', 'D', '*'), ('*', '*', 'C'), ('*', '*', 'D'), ('*', '*', '*')] >>> list(i for i in product(voc,repeat=3)if len(set(i))>1) [('C', 'C', 'D'), ('C', 'C', '*'), ('C', 'D', 'C'), ('C', 'D', 'D'), ('C', 'D', '*'), ('C', '*', 'C'), ('C', '*', 'D'), ('C', '*', '*'), ('D', 'C', 'C'), ('D', 'C', 'D'), ('D', 'C', '*'), ('D', 'D', 'C'), ('D', 'D', '*'), ('D', '*', 'C'), ('D', '*', 'D'), ('D', '*', '*'), ('*', 'C', 'C'), ('*', 'C', 'D'), ('*', 'C', '*'), ('*', 'D', 'C'), ('*', 'D', 'D'), ('*', 'D', '*'), ('*', '*', 'C'), ('*', '*', 'D')]
chars=['A', 'B', 'C', 'D', '*'] s="" L = len(chars) for i in range(0,5): s += chars[random.randrange(0,L)] # now ensure that a character is present by setting a random character s[random.randrange(0,5)] = chars[random.randrange(0,L-1)]
实际上,如果您想要列表元素的乘积,可以使用^{} :
如果你只想得到相等的子集,你可以使用下面的列表,例如:
相关问题 更多 >
编程相关推荐