gpt4 book ai didi

python - 减少组合,消除具有两个以上连续的行

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:22 26 4
gpt4 key购买 nike

我试图让它工作并打印到文件,因为速度更快,但我不知道为什么它从每个结果中打印 7 行,并以一个巨大的文件结尾,我做错了什么?我想要从 1 到 56 中选择 7 个数字,每次迭代中不超过 2 个连续的数字,排列给出大约 2.3 亿个结果,所以我认为这个数字一定更小,谢谢!

from itertools import combinations, groupby
from operator import itemgetter
f= open('7.txt','w')

data = [1,2,3,4,5,6,7,8,9,10,11,
12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,
28,29,30,31,32,33,34,35,
36,37,38,39,40,41,42,43,
44,45,46,47,48,49,50,51,
52,53,54,55,56]

def find_consecutive(lst, min_string=3):
for k, g in groupby(enumerate(lst), lambda (i,x):i-x):
num_string = map(itemgetter(1), g)
if len(num_string) >= 3:
yield num_string

for i in combinations(data, 7):
if not any(find_consecutive(i, min_string=3)):
for x in i:
f.write(str(i))
f.write('\n')
f.close()

最佳答案

您的代码可以像下面这样简化。

更改:

  • 请注意,为了便于测试,我已将文件写入代码替换为 print
  • 我已将您的数据更改为范围
  • 更改了 has_consecutive_number 函数
  • 将 x 写入文件而不是 i
from itertools import combinations, groupby, count
from operator import itemgetter

data = range(1,57)

def has_consecutive_number(lst, min_string=3):
lst = sorted(lst)
consecutives = [i-j for i,j in zip(lst[1:], lst[:-1])].count(1)
if consecutives<min_string:
return True

return False

with open('7.txt','w') as f:
for i in combinations(data, 7):
if has_consecutive_number(i, min_string=3):
print(i)
for x in i:
print(x)


关于python - 减少组合,消除具有两个以上连续的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58014084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com