求教 大佬们帮忙看一下代码吧
本帖最后由 苏紫方璇 于 2023-7-8 20:45 编辑事情是这样的,我是一个技术小白,从网上找了一个技术帮忙写代码,但是他发我之后没办法用,大佬们有时间可以帮忙看下这个有问题吗?
import pandas as pd
import random
from itertools import combinations
# 读取数据
data = pd.read_excel('./测试.xlsx', header=None)
## 全部取法
count = 6
res_list = []
# 选择任意count+1组数据进行比较,得到全部组合
selected_groups = list(combinations(data.values, count+1))
# 对每一组合进行计算
for groups in selected_groups:
common_numbers = set(groups[0])# 初始化为第一组数据的数字集合
for numbers in range(1, len(groups)):
common_numbers = common_numbers.intersection(groups[numbers])
if len(common_numbers) == 6:
res_list.append(common_numbers)
# 去重操作
res_list = list(set(tuple(sorted(s)) for s in res_list))
# 计算结果次数
print(len(res_list))
# 保存计算结果
pd.DataFrame(res_list).to_excel(f'./全部取法_{data.shape[0]}组计算{count}次.xlsx', index=False, header=None)
这是他写的代码下面是我的需求0.1.2.3.4.5.6.7.8.90.1.2.3.4.5.6.7.8.100.1.2.3.4.5.6.7.8.11....0.1.2.3.4.5.6.7.8.1000.1.2.3.4.5.6.7.9.100.1.2.3.4.5.6.7.9.11...0.1.2.3.4.5.6.7.9.1000.1.2.3.4.5.6.7.10.110.1.2.3.4.5.6.7.10.12...0.1.2.3.4.5.6.7.99.1000.1.2.3.4.5.6.8.9.100.1.2.3.4.5.6.8.9.11...0.1.2.3.4.5.6.98.99.100...然后一直到0.2.3.4.5.6.7.8.9.100.2.3.4.5.6.7.8.9.11...0.92.93.94.95.96.97.98.99.100然后1.2.3.4.5.6.7.8.9.101.2.3.4.5.6.7.8.9.11...1.92.93.94.95.96.97.98.99.100
0123456这些数字代表各代表一组数字,每组25个然后每10组做比较 如果比较完之后相同的数字是六个数字就保留 大于或小于六个就作废 需求再描述下吧,看不懂 太抽象了,组织下语言 或者配个图啥的 本帖最后由 xueche8 于 2023-7-9 11:50 编辑
import pandas as pd
import random
from itertools import combinations
# 将pandas作为pd导入随机从itertools导入组合
# 定义一些常量
DATA_FILE = './测试.xlsx' # 数据文件路径
RESULT_FILE = './全部取法_{group_num}组计算{count}次.xlsx' # 结果文件路径
GROUP_NUM = 7 # 比较的组数
COUNT = 6 # 相同数字的个数
NUM_PER_GROUP = 25 # 每组数字的个数
# 定义一个函数,用于计算任意group_num组数据中有count个相同数字的组合,并返回结果列表
def calculate_common_numbers(data, group_num, count):
res_list = [] # 初始化结果列表
# 选择任意group_num组数据进行比较,得到全部组合
selected_groups = list(combinations(data.values, group_num))
# 对每一组合进行计算
for groups in selected_groups:
common_numbers = set(groups)# 初始化为第一组数据的数字集合
for numbers in range(1, len(groups)):
common_numbers = common_numbers.intersection(groups)
if len(common_numbers) == count:
res_list.append(common_numbers)
return res_list
# 定义一个函数,用于保存结果列表到Excel文件中
def save_result(res_list, result_file):
# 去重操作
res_list = list(set(tuple(sorted(s)) for s in res_list))
# 计算结果次数并打印
print(len(res_list))
# 保存计算结果到Excel文件中
pd.DataFrame(res_list).to_excel(result_file, index=False, header=None)
# 主程序
if __name__ == '__main__':
try:
# 读取数据
data = pd.read_excel(DATA_FILE, header=None)
# 调用函数计算结果列表
res_list = calculate_common_numbers(data, GROUP_NUM, COUNT)
# 调用函数保存结果列表
save_result(res_list, RESULT_FILE.format(group_num=GROUP_NUM, count=COUNT))
except Exception as e:
# 处理异常情况并打印错误信息
print(f'出错了!{e}')
baiyang4546 发表于 2023-7-8 22:46
需求再描述下吧,看不懂
需求简单来说就是100组数字,每组数字都是25个数字组成,然后这一百组数字分成十组或者任意组全都比较一遍(这里需要解释一下,拿分成十组来举例就是100组数字,分成十组数字比较一次,100组数字全部比较一遍,如果是六个数字就保留,大于或者小于六个数字就作废) tuoluo348 发表于 2023-7-9 05:34
太抽象了,组织下语言 或者配个图啥的
简单来说就是假设我输入100组数字(每组数字都是25个),然后比较组数就是多少组数字做比较,然后100组数字分成每十组数字为一次计算,全部比较完之后相同的数字是六个数字就保留,大于或小于就作废 xueche8 发表于 2023-7-9 11:49
import pandas as pd
import random
from itertools import combinations
您好,现在他这个代码运行之后就总会爆内存,有什么办法可以解决一下吗?
页:
[1]