之前写过一个讨论主题帖:
29组24码中6保6表格的应用
https://bbs.17500.cn/forum.php?mod=viewthread&tid=8562783&fromuid=1599223(出处: 乐彩论坛)
有老铁提出设想:如果将29组24码中的每一个元素(单元格)都减1,减2.。。。。减32,那么就会形成33套29组24码,
利用周末时间,化了一晚上,用python写了个运算程序,源代码分享给老铁们:
code:
import pandas as pd #加载pandas
import numpy as np #加载numpy
from collections import Counter #加载Counter,统计用
#用pandas读入29组24码原始表格,须将EXCEL表格放在python运行目录下
pd_a29=pd.read_excel(r'29组24选6表格.xlsx')
#将pandas数据转置后再转换成数组(ndarrar)
arr_a29=np.array(pd_a29.T)
#自定义函数:生成33套29组24码字典
def Create_dict():
"""
33套(一套原始29组24码,32套新生成29组24码)数组;每套数组分别于原始数组相减不同的数值(1-32)
返回:com_dic;键值=0-32,0表示原始29租4码数组,键值1-32表示在原始数组上每个元素减n(1-32)所生成的新数组
"""
com_dic={}#声明字典
com_dic[0]=arr_a29 #将原始数组赋值给字典键值0
lst_temp1=[] #临时列表lst_temp1声明
lst_temp2=[] #临时列表lst_temp2声明
for i in range(1,33): #循环,创建新数组
for l1 in arr_a29: #遍历原始数组
for l2 in l1: #遍历原始数组中的列表
if l2-i>0: #减i大于0
lst_temp1.append(l2-i) #运算后的元素,插入临时列表lst_temp1
else: #减i小于0
lst_temp1.append(l2-i+33) #运算后的元素+33,插入临时列表lst_temp1
lst_temp2.append(list(set(lst_temp1))) #排序并列表化后,插入临时列表lst_temp2
lst_temp1=[] #临时列表lst_temp1置空
com_dic=np.array(lst_temp2) #将临时列表lst_temp2转换为数组(ndarray)后赋值给字典键值i
lst_temp2=[] #置空临时列表lst_temp2
return com_dic
#自定义函数:输入红球6码,返回33套29组24码数组的组合特征,每套数组包含两个参数,参与交集的数组数量、索引代号及生成的号码数量
def Compare_arr(code):
"""
输入参数:code_list:一组6码组合,须是一个字符串,每个号码间用空格作为分隔符,例如:01 02 03 04 05 06
返回:字典:键值=输入列表,值=33套数组参数
"""
arr_name=''
co=code.strip() #输入的字符串首尾去空格
co_lst=list(list(map(int,co.split(' ')))) #将字符串转换成列表
res_dcit={} #返回字典声明
for key,va in dict_com.items(): #遍历33套29组24码数组
n=0 #计数器置零
name_str='' #列名索引名称置空
c1=[] #临时列表c1置空,计算最终交集数用
for i in va: #遍历数组
n+=1 #计数器步长为1
if len(set(co_lst)&set(i))==6:
name_temp='R'+'%02d'%n + ' ' #临时列名字符串
name_str+=name_temp #生成列名
c1.extend(i) #将包含6码的整列添加进临时列表c1
#判断交集后生成的号码数量:
if len(c1)==24:
t=24
else:
q=int(len(c1)/24)
c2=dict(Counter(c1))
c3=[key for key1,value1 in c2.items()if value1 == q]
t=len(c3)
res_dcit[key]=[int(len(c1)/24),name_str.strip(),t] #将交集列数,列名,交集后生成的号码数量赋值给键值key
return res_dcit
code=input('输入红球6码组合:')
Compare_arr(code)
29组24选6表格.xlsx运行结果:
输入红球6码组合:04 15 21 27 28 29
{0: [3, 'R03 R08 R25', 15],
1: [5, 'R02 R03 R06 R22 R23', 18],
2: [4, 'R10 R12 R17 R22', 15],
3: [3, 'R10 R17 R25', 15],
4: [4, 'R12 R14 R16 R27', 15],
5: [3, 'R01 R07 R18', 18],
6: [2, 'R07 R09', 18],
7: [4, 'R01 R07 R16 R19', 15],
8: [2, 'R06 R27', 18],
9: [5, 'R04 R08 R11 R28 R29', 12],
10: [5, 'R21 R22 R23 R24 R26', 18],
11: [6, 'R10 R12 R13 R21 R25 R28', 12],
12: [1, 'R27', 24],
13: [6, 'R02 R05 R16 R17 R18 R22', 12],
14: [9, 'R02 R03 R06 R10 R12 R19 R20 R23 R27', 12],
15: [1, 'R11', 24],
16: [3, 'R09 R11 R28', 15],
17: [3, 'R04 R25 R28', 15],
18: [1, 'R11', 24],
19: [5, 'R02 R21 R22 R24 R26', 18],
20: [3, 'R03 R08 R15', 15],
21: [3, 'R01 R12 R26', 15],
22: [3, 'R02 R20 R27', 18],
23: [1, 'R25', 24],
24: [6, 'R09 R13 R14 R15 R18 R19', 15],
25: [1, 'R05', 24],
26: [1, 'R17', 24],
27: [5, 'R10 R11 R17 R24 R29', 12],
28: [4, 'R01 R07 R10 R20', 15],
29: [3, 'R01 R07 R16', 18],
30: [5, 'R03 R09 R14 R15 R19', 15],
31: [6, 'R09 R20 R21 R23 R27 R28', 12],
32: [5, 'R06 R07 R09 R11 R13', 12]}
数据说明:最左边的整数(0-32)表示第几套数组(29组24码),中括号右边第一个数字表示有几组参与了交集,单引号内是列名,最后一个数字是参与交集的数组生成的交集号码数量
可以看出来:
1、第0套(原始29组24码),与原始数组结果一致
2、生成的交集号码数量继续遵循了0套数组的规律,比如只有1组的情况下,必然生成24码交集号码,3组交集有15 18两种。。。。。等等
3、由此猜想,是否能生成33套标准数据库(全部1107568注号码),然后对比这33套数组之间的联系呢?
4、下一步我将继续在此基础上先生成33套字典,键值=6码组合,值=数组特性
5、对python感兴趣的老铁欢迎回帖讨论,我也是刚学python,这段程序尽量将注释写的详细些,希望大神们多多指教!!