0

我写了一个脚本来打印彩票组合。我的目标是:彩票中有 6 个数字,介于 1-49 之间,这意味着有 13,983,816 种组合。我想按顺序打印出所有组合,同时确保没有重复。

到目前为止,这是我的代码:

import random
numbers = []
for i in range(2):
    for j in range(6):
        numbers.append(random.randint(1,49))
        for k in range(j):
            while numbers[j]==numbers[k]:
                numbers[j]=random.randint(1,49)
    print sorted(numbers)
    numbers = []
f = open('combinations.txt', 'w')
f.write(str(sorted(numbers)))

问题是:

终端中的输出是:

[18, 20, 27, 32, 44, 48]
[5, 7, 10, 13, 33, 45]

我想从 开始[1,2,3,4,5,6]和结束[44,45,46,47,48,49]。所以我需要订购结果。

另外,我尝试将列表转换为字符串,以便可以将结果放入一个大文本文件中,但[]目前我只是打印到文本文件中。

4

3 回答 3

5

使用itertools.combinations

>>> from itertools import combinations
>>> for comb in combinations(range(1,50), 6):
...     print comb      #Hit Enter at your own risk

将组合打印到文本文件:

with open('combinations.txt', 'w') as f:
   for comb in combination:
       f.write(str(comb) + '\n')
于 2013-07-28T06:45:26.270 回答
4

您正在清除列表然后写入文件。

from itertools import combinations
f = open('combinations.txt', 'w')
for comb in combinations(range(1,50), 6):
    f.write(str(comb))
    f.write('\n')
f.close()

请确保您至少有 350 兆字节的可用磁盘空间!和一些空闲时间。

(我检查了 348168480 字节:

>>> s = 0
>>> for comb in combinations(range(1,50), 6):
...    s += len(repr(comb))+2
... 
>>> s
348168480

)。

于 2013-07-28T07:01:12.897 回答
0
**import itertools
f= open('combinations.txt','w')
numb = [1,2,3,4,5,6,7]
it = itertools.combinations(numb,3)
for x in it:
    f.write(str(x))
    f.write('\n')
f.close()**

好了,只需将尽可能多的数字添加到 numb 并将 it 变量更改为 r 的对应者

于 2015-09-12T15:30:40.090 回答