例如,如果function(2)
则产生
['XX','XO','OX','OO']
我不确定如何解决这个问题
答案 0 :(得分:5)
除非这是一项任务,否则请使用itertools中的product
,如下所示:
>>> import itertools as it
>>> list(it.product('XO', repeat=2))
[('X', 'X'), ('X', 'O'), ('O', 'X'), ('O', 'O')]
如果您想知道如何以“长”方式执行此操作,文档中提供了product
方法的实现:
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
答案 1 :(得分:2)
如果你想让你自己的功能做这样的事情:
def crossProduct(A, B):
#returns cross product of elements in A x elements in B
return [a+b for a in A for b in B]
suits = 'CDHS'
ranks = '123456789JQKA'
cards = cross(suits,ranks)
print cards # prints out all 52 cards
答案 2 :(得分:0)
如果function(n - 1)
生成长度为n - 1
的所有可能组合的列表,则可以通过返回
n
的组合
1)' X'与function(n - 1)
2)' O'与function(n - 1)
像这样:
def function(n):
if n < 1:
return []
elif n == 1:
return ['X', 'O']
else:
return ['X' + string for string in function(n - 1)] + ['O' + string
for string in function(n - 1)]
答案 3 :(得分:0)
如果您无法使用itertools
,我建议您考虑binary number representation。如果您遍历0
和2^n - 1
之间的所有数字,则其0填充二进制表示将产生0
和1
的所有可能组合:
n = 3
for i in xrange(1<<n):
print bin(i)[2:].zfill(n)
将打印:
000
001
010
011
100
101
110
111
(关于字符串操作,请参阅this question)
该任务的剩余部分是如何将101
转换为XOX
,这可以手动完成,也可以使用maketrans
/ translate
完成。
请注意,这仅适用于二进制字母,例如XO
或|-
。