《excel吧提问-同类商品找出几个和最接近且不能小于目标值的》,正好之前python写过类似组合求和的代码《python组合求和》
可以分别查找大于等于、小于等于、绝对值最近似和值,仅返回最符合条件的组合

from time import time
from itertools import combinations
from openpyxl import load_workbookdef search(find_dict, sum_m, mode='>='):"""对列表中的所有元素,遍历其所有组合,使其和为需查找的值,输出结果以列表嵌套形式:param dict find_dict: 字典find_dict,键-单元格地址,值-数值:param Number sum_m: 需查找的和值sum_m:param str mode: 3种查找模式,>=,<=,<>,即大于等于、小于等于、绝对值与最近和值返回结果:列表内嵌套元组[num, (address)]"""start_time = time()list_keys = list(find_dict.keys())  # 字典键列表result = [None, None]  # 列表,存放sum_c及其地址元组for i in range(1, len(list_keys)+1):  # 所有组合个数(2^n - 1)combin_list = list(combinations(list_keys, i))  # 迭代器写入列表for c in combin_list:sum_c = sum(find_dict[k] for k in c)  # 组合键值对求和if sum_c == sum_m:  # 等于,直接返回结果result[0] = sum_cresult[1] = cend_time = time()print('已查找相等组合,用时:%.4f秒' % (end_time - start_time))return resultelif mode == '>=' and sum_c > sum_m:  # 大于if result[0] == None or sum_c < result[0]:result[0] = sum_cresult[1] = celif mode == '<=' and sum_c < sum_m:  # 小于if result[0] == None or sum_c > result[0]:result[0] = sum_cresult[1] = celif mode == '<>':  # 绝对值if result[0] == None or abs(sum_m - sum_c) < abs(sum_m - result[0]):result[0] = sum_cresult[1] = cend_time = time()print('所有组合都已查找,用时:%.4f秒' % (end_time - start_time))return resultdef read_excel_search(excel_file):"""读取Excel表数据的待查找find_dict、和sum_m,返回符合条件的地址,写入标记:param str excel_file: Excel表格文件路径"""start_time = time()wb =  load_workbook(excel_file)  # openpyxl打开文件ws = wb['Sheet1']nrow = ws.max_rowfor i in range(3, nrow+1):  # 左闭右开if ws.cell(i, 1).value != None:sum_m = ws.cell(i, 2).valuefind_dict = {}  # 要查找的数据,空字典,键-单元格地址,值-数值for j in range(3, nrow+1):if ws.cell(i, 1).value == ws.cell(j, 5).value:address = '{!s}-{!s}'.format(ws.cell(j, 7).row, ws.cell(j, 7).column)find_dict[address] = ws.cell(j, 7).value## 调用查找函数,返回符合条件的值;返回结果是列表元组result = search(find_dict, sum_m, '<>')## openpyxl写入Excelif result[1] != None:for res in result[1]:  # 遍历结果,地址元组,写入标记r = res.split('-')ws.cell(int(r[0]), int(r[1])+1).value = '1'wb.save(excel_file)  # 保存文件end_time = time()print('Excel已写入查找结果,累计用时:%.4f秒' % (end_time - start_time))if __name__ == '__main__':xlsx = r'E:\测试\组合求和.xlsx'read_excel_search(xlsx)

举例

python组合求和-近似值相关推荐

  1. python组合求和

    改进<python从数组中找出所有和为M的组合>,使用python排列组合itertools模块combinations函数,并使用openpyxl模块从Excel中读取数据.写入计算结果 ...

  2. python数字求和输入完第一个数没反应_Python 数字求和

    Python 数字求和 以下实例为通过用户输入两个数字,并计算连个数字之和: # -*- coding: UTF-8 -*- # Filename :test.py # author by : www ...

  3. python元素求和_Python之list对应元素求和的方法

    本次分享将讲述如何在Python中对多个list的对应元素求和,前提是每个list的长度一样.比如:a=[1,2,3], b=[2,3,4], c=[3,4,5], 对a,b,c的对应元素求和,输出应 ...

  4. python数字求和_python数字求和

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 对于每个值,我右对齐值的位(忽略0b),计算1的数量,并移动1的数量. #!us ...

  5. python奇数阶乘求和_使用Python阶乘求和的方法及问题总结

    使用Python阶乘求和的方法及问题总结 发布时间:2020-04-28 09:23:14 来源:亿速云 阅读:190 作者:小新 本篇文章和大家了解一下使用Python阶乘求和的方法及问题总结.有一 ...

  6. python阶乘求和的代码_Python阶乘求和的代码详解

    Python阶乘求和的方法 题目描述: 获得用户输入的整数n,输出 1!+2!+-+n!的值. 如果输入数值为0.负数.非数字或非整数,输出提示信息:输入有误,请输入正整数. 方法一: #factTe ...

  7. python阶乘求和的流程图解_Python阶乘求和的方法

    Python阶乘求和的方法 题目描述: 获得用户输入的整数n,输出 1!+2!+-+n!的值. 如果输入数值为0.负数.非数字或非整数,输出提示信息:输入有误,请输入正整数. (推荐学习:Python ...

  8. python两两组合求和_LeetCode-python 40.组合总和 II

    题目链接 难度:中等       类型: 深度优先搜索 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. ca ...

  9. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

最新文章

  1. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型
  2. 你与ACM MM的距离只差一场算法比赛
  3. 18年你需要了解的15个人工智能统计数据
  4. Storm的StreamID使用样例(版本1.0.2)
  5. QT中封装的IP地址的widget
  6. java笔记数组小知识点
  7. 必要商城MySQL开发规范
  8. 下 终端_Linux/UNIX 下终端复用利器 tmux
  9. oracle安装时配饰失败了,【求助】急!!!!oracle客户端安装时创建实例失败
  10. windows linux复制文件夹命令,ubuntu下复制目录和文件的指令以及和windows下的copy方式...
  11. podspec文件介绍
  12. Oracle与Google两IT巨头战争冲击整个硅谷
  13. 《概率论与数理统计》(浙大第四版)第七章总结笔记(纯手写)
  14. PostgreSQL 11.2 手册 (中文版) PostgreSQL中文社区
  15. Revit导入lumion渲染
  16. python读取csv文件并绘图
  17. stimulsoft入门教程:报表与页面上的图表(一)
  18. RISCV ISS Spike 介绍
  19. Vue3.0源码解读 - 响应式系统
  20. 写给Android App开发人员看的Android底层知识合集(1-8)

热门文章

  1. 7-1 构造方法 (5 分)-java
  2. junit5_在JUnit中测试预期的异常
  3. python中返回结果为true_在Python函数中使用True、False和None作为返回值
  4. 邯郸计算机学校排名2015,邯郸初中排名2021最新排名,邯郸初中排名前十的学校有哪些...
  5. python办公自动化(2)——字符串转小、转移目标文件、判断文件是否存在(带过程与结果)
  6. 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—前言
  7. IDEA创建maven项目没有src/main/java目录问题
  8. Widget原理分析
  9. Linux下yum源配置实战 1
  10. 基于Java Web的汽车租赁系统的设计与实现