繁体   English   中英

Python - 所有彩票组合 - 无重复,按顺序

[英]Python - all lottery combinations - no duplicates, in order

我写了一个脚本来打印彩票组合。 我的目标是:彩票中有 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)))

问题是:

终端中的output为:

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

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

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

使用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')

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

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 MB可用磁盘空间! 还有一些时间。

(348168480字节,我检查过:

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

)。

**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的对应变量

import time
from datetime import timedelta

start_time = time.time()

from itertools import combinations
comb_list = list(combinations(range(1, 50), 6))
start_index = comb_list.index((1, 2, 3, 4, 5, 6))
counter = 0

for i, comb in enumerate(comb_list[start_index:]):
    print(f"Combination {i+1}: {comb}")
    counter += 1

end_time = time.time()
elapsed_time = end_time - start_time
elapsed_time = timedelta(seconds=elapsed_time)
print("Elapsed time:", elapsed_time)

#Combination 1: (1, 2, 3, 4, 5, 6) #Combination 13983816: (44, 45, 46, 47, 48, 49) #Elapsed time: 0:03:33.373467

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM