吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 632|回复: 6
收起左侧

[求助] 求教 大佬们帮忙看一下代码吧

[复制链接]
带笔带本带马扎 发表于 2023-7-8 16:52
本帖最后由 苏紫方璇 于 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组做比较 如果比较完之后相同的数字是六个数字就保留 大于或小于六个就作废

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

baiyang4546 发表于 2023-7-8 22:46
需求再描述下吧,看不懂
tuoluo348 发表于 2023-7-9 05:34
xueche8 发表于 2023-7-9 11:49
本帖最后由 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[0])  # 初始化为第一组数据的数字集合
        for numbers in range(1, len(groups)):
            common_numbers = common_numbers.intersection(groups[numbers])
        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}')
 楼主| 带笔带本带马扎 发表于 2023-7-9 16:13
baiyang4546 发表于 2023-7-8 22:46
需求再描述下吧,看不懂

需求简单来说就是100组数字,每组数字都是25个数字组成,然后这一百组数字分成十组或者任意组全都比较一遍(这里需要解释一下,拿分成十组来举例就是100组数字,分成十组数字比较一次,100组数字全部比较一遍,如果是六个数字就保留,大于或者小于六个数字就作废)
 楼主| 带笔带本带马扎 发表于 2023-7-9 16:18
tuoluo348 发表于 2023-7-9 05:34
太抽象了,组织下语言 或者配个图啥的

简单来说就是假设我输入100组数字(每组数字都是25个),然后比较组数就是多少组数字做比较,然后100组数字分成每十组数字为一次计算,全部比较完之后相同的数字是六个数字就保留,大于或小于就作废
 楼主| 带笔带本带马扎 发表于 2023-7-9 16:19
xueche8 发表于 2023-7-9 11:49
import pandas as pd
import random
from itertools import combinations

您好,现在他这个代码运行之后就总会爆内存,有什么办法可以解决一下吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表