首页 > 解决方案 > 循环遍历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 次。甚至没有我目前建议的两倍。

必须有更有效的方法。有任何想法吗?提前致谢。

标签: pythonloopsoptimizationpython-3.6

解决方案


第一个循环只是确定 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您必须做什么。带有数据的最小运行代码将有助于提供支持。


推荐阅读