python - 循环遍历python列表并比较和调整元素值的最有效方法
问题描述
我有一个具有特定属性/变量的元素列表。首先,我需要检查所有属性是否具有相同的值,如果不是,我需要将每个元素的此属性调整为最高值。问题是,编写这样一个循环并不难。但是,我想知道最有效的方法是什么。
我目前的方法工作正常,但它循环遍历列表 2 次,有两个局部变量,感觉不够高效。
我简化了代码。这基本上就是我所拥有的:
biggest_value = 0
re_calc = 0
for _, element in enumerate(element_list):
if element.value > biggest_value :
biggest_value = element.value
re_calc += 1
if re_calc > 1:
for _, element in enumerate(element_list):
element.value = adjust_value(biggest_value)
element_list(_) = element
让我烦恼的是“re_calc”变量的必要性。对最大值的简单检查没什么大不了的。但是这个任务由 3 个步骤组成:“比较属性--> 找到最大的值--> 可能调整其他”。但是我不想循环这个列表 3 次。甚至没有我目前建议的两倍。
必须有更有效的方法。有任何想法吗?提前致谢。
解决方案
第一个循环只是确定 element_list 的最大值。所以一种方法可以是:将 element_list 转换为 numpy 数组。不幸的是,您不知道列表的外观。但是,如果列表包含数字,那么
L = np.array(element_list)
可能可以做到。之后使用np.max(L)
。没有 for 循环的 Numpy 命令通常要快得多。
import numpy as np
nl = 10
L = np.random.rand(nl)
biggest_value = np.max(L)
L, biggest_value
给
(array([0.70047074, 0.14160459, 0.75061621, 0.89013494, 0.70587705,
0.50218377, 0.31197993, 0.42670057, 0.67869183, 0.04415816]),
0.8901349369179461)
在第二个 for 循环中,您想要实现的目标并不明显。不幸的是,您没有提供输入和所需的输出,也没有告诉adjust_value
您必须做什么。带有数据的最小运行代码将有助于提供支持。
推荐阅读
- reactjs - React PropTypes.shapes 相互依赖
- angular - 带有取消图标的 matChip 无法移除并以不同方式显示
- flutter - 通过 android 和 ios 中的几个按钮在社交媒体上分享链接
- java - 为什么我的 Combobox 不能正确更新其颜色?
- javascript - 如果选择了所有子节点,如何将父树节点标记为选中
- javascript - 如何使用 PHP 中循环数据中的方法 post 将数据发送到控制器
- c++ - 我的 epoll 服务器丢失了一些连接。为什么?
- javascript - Chart.js 在悬停时显示旧图表
- elasticsearch - Elasticsearch 管道搜索?
- adsense-api - 为什么 AdSense 网络界面和 API 报告的数字不同?