【问题标题】:Optimizing a list's search优化列表的搜索
【发布时间】:2020-02-12 19:52:55
【问题描述】:

我需要以最佳方式在列表中进行搜索。基本上,如果列表中的任何元素介于 Vmin 和 Vmax 之间,并且是一个数字(有时该过程会产生不是数字的结果:/),我需要评估损失(我有一个函数可以做到这一点)。否则,我给它一个巨大的损失,比如10**10。你能帮我优化这个搜索吗?我将结构更改为 list() 因为它原来是一个元组,我不知道如何操作这个结构:/

def losses():
    Tensoes = list(objeto.get_AllNodeVpu())
    Lim = 0
    for i in Tensoes:
        if (i <= Vmin) or (i >= Vmax):
            Lim += 1
        if (np.isnan(i) == True):
            Lim += 1

    if (Lim == 0)
        loss = objeto.get_circuit_total_losses()
    else:
       loss = 10**10        

    return loss

【问题讨论】:

  • 在您的计算机编程教育的这个阶段,您不必太担心优化问题。您需要学习使用 Big-Oh 表示法分析算法,以了解可能的优化在哪里。您还需要了解如何使用分析器来测量代码的运行时间。
  • 感谢您的提示。我会去找它:D
  • 我正在寻找可以帮助我的东西,我认为我的问题更多的是关于“进行这种搜索的 Python 方式”

标签: python search optimization


【解决方案1】:

这是 Python 吗?那么你应该标记它。

您没有在这里进行搜索;您正在处理列表中的每个元素以检查它是否超出范围。

你的列表排序了吗?然后你可以只检查它的第一个和最后一个元素。但是如果你必须对其进行排序 - 它会比你当前的实现更昂贵。

附:您以 It's me again 开头,但您的状态显示这是您的第一篇文章 :)

附加: 好吧,在找到第一个“无效”元素后,您不需要循环。我不知道 Python,但应该是这样的:

def losses() :
    Tensoes = list(objeto.get_AllNodeVpu())
    for i in Tensoes :
        if np.isnan(i) == True or i <= Vmin or i >= Vmax :
            return 10 * *10

    return objeto.get_circuit_total_losses()

【讨论】:

  • 已标记,感谢您的提示,是的,第二个帖子。第一个是关于随机字符串......所以,不,列表没有排序,但我不需要排序。列出一组节点电压,我需要验证所有节点是否都在限制范围内。
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多