我有一个具有特定属性/变量的元素列表。首先,我需要检查所有属性是否具有相同的值,否则,我需要针对每个元素使该属性适应高值。 问题是,编写这样的循环并不难。但是,我想知道最有效的方法是什么。
我目前的方法效果很好,但它在列表中循环了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次。甚至不是我当前建议的两倍。
必须有一种更有效的方法。有任何想法吗?预先感谢。
答案 0 :(得分:0)
第一个循环只是确定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
必须做什么。最少的运行代码和数据将有助于提供支持。