我期待写一些能显示所有可能组合的有序列表的东西.它可以从类似的东西开始
11-AA 11-AB 11-AC
......并最终以......结束
59-YZ 59-ZZ
如果数字的第一部分只能在1-5之间,我也会喜欢它.我一直在使用itertools,但我很难生成这种特定的东西.我可以生成重复两次的4个字母的所有可能组合,但是我遇到问题,并告诉程序"嘿,你只能选择1到4之间的第一个数字".
import itertools perms = itertools.product('ABCD', repeat=2) for perm in perms: print('The possible combinations are', perm)
有代码.这不是必须使用itertools,这正是我熟悉的.
编辑:第一个答案正是我需要的.因为逗号,我不喜欢itertools正在做的事情,但你给我看的小片段是魔术.谢谢.
要回答这个问题,循环似乎不太干净?我也刚刚发现了itertools,我可能太喜欢了.
只是以相同的方式做到这一点.一个字符必须是1
,2
,3
,4
,或5
; 第二个可以是任何数字; 第三必须是-
,最后两个必须是A
,B
,C
,或D
,所以:
perms = itertools.product('12345', '0123456789', '-', 'ABCD', 'ABCD')
然后,将它们加入到字符串中:
print('The possible combinations are:') for perm in perms: print(''.join(perm))
这开始于10-AA
,而不是11-AA
.59
如果你开始就没有办法结束11
(假设你想要按顺序排列数字).
我最初离开了-
外面并加入了每个字符串format
,但我认为这个速度较慢.在我使用的每个Python版本上,它的速度至少要快两倍.(在C 1长度的套环的成本是微不足道的,因为是建立一个5元组对4元组;的成本format
与join
不).
你也可以product
用a range(11, 60)
和a product('ABCD', repeat=2)
,然后将它压扁chain
,然后format
每一个.虽然这是概念上比较简单,这将是一个很多难以阅读,并即将为扁平慢format
版本.
无论如何,在OS X 10.9上的64位python.org 3.3.2中:
In [1189]: %timeit collections.deque((''.join(perm) for perm in itertools.product('1234', '1234567890', '-', 'ABCD', 'ABCD')), maxlen=0) 10000 loops, best of 3: 129 µs per loop In [1190]: %timeit collections.deque(('{}{}-{}{}'.format(*perm) for perm in itertools.product('1234', '1234567890', 'ABCD', 'ABCD')), maxlen=0) 1000 loops, best of 3: 359 µs per loop