【问题标题】:Large list, find all minima of list (python)大列表,找到列表的所有最小值(python)
【发布时间】:2015-04-13 14:36:09
【问题描述】:

给定大量波动值,您如何确定所有局部最小值?不使用 numpy。局部最小值是指列表中作为函数谷值的所有值。

List_y = [23, 8, -7, 57, 87, 6]

我想要:

New_list = [-7, 6]

【问题讨论】:

  • 如果数字小于两边的两个。
  • 这里没有提到 numpy。不要假设人们会自动拥有外部库。
  • 您需要更具体地了解“本地最小值”的含义。编辑您的问题并给我们一些预期的输入/输出。
  • [23, 6, 6, 6, 42] 应该返回什么?

标签: python list


【解决方案1】:
def local_min(ys):
    return [y for i, y in enumerate(ys)
            if ((i == 0) or (ys[i - 1] >= y))
            and ((i == len(ys) - 1) or (y < ys[i+1]))]


>>> local_min([23, 8, -7, 57, 87, 6])
[-7, 6]
>>> local_min([23, 6, 6, 6, 42])
[6]
>>> local_min([6, 6, 4])
[4]

【讨论】:

  • 给定[6, 6, 4],您将打印[6, 4]
  • @BillLynch:不错的收获
  • @BillLynch:我把它改了,你能帮我找出其他缺陷吗?
  • 给定[4, 6, 6],您将打印[4, 6]
  • 6 根本不是列表[4, 6, 6] 中的局部最小值。哦,好吧。
【解决方案2】:

我非常喜欢分阶段迭代这些问题。

l = [23, 8, -7, -7, 57, 87, 6]

# Remove identical neighbors
# l becomes [23, 8, -7, 57, 87, 6]
l = [x for x,y in zip(l[0:], l[1:]) if x != y] + [l[-1]]

# Append positive infinity to both endpoints
# l becomes [inf, 23, 8, -7, 57, 87, 6, inf]
l = [float("inf")] + l + [float("inf")]

# Retain elements where each of their neighbors are greater than them.
# l becomes [-7, 6]
l = [y for x, y, z in zip(l[0:], l[1:], l[2:]) if x > y < z]

【讨论】:

  • 我认为它被低估了:)
  • 根据我的定义,最小值并不严格小于其邻居,但可能等于(其中之一)它们。因此,我认为您的 删除相同邻居 步骤可能会被取消,代码为:&gt;&gt;&gt; l = [23, 8, -7, -7, 57, 87, 6] >>> l = [float("inf")] + l + [float("inf" )] &gt;&gt;&gt; l = [y for x, y, z in zip(l[0:], l[1:], l[2:]) if x &gt;= y &lt;= z] >>> l [-7, -7, 6]
  • @boardrider:那么3 4 4 4 3 会报告3 4 3 这是错误的。此外,在 cmets 中,John 说他可以只从您建议的输入中获得 -7, -6。我同意更准确的解决方案应该是 -7 -7 6,但使用列表推导更难创建该答案。
  • @Bill,为什么3 4 3 是错误的(如果我们将最小定义为 3 是None and 3 的最小值,44 4 4 的最小值,33 and None 的最小值。我没有得到什么?
  • @boardrider:John 从未完全阐明他所说的最小值是什么意思。你提出的定义很可能就是他想要的。就个人而言,我认为这更像是一个函数。所以我们不能只看邻居。
【解决方案3】:

在这里你可以轻松理解数组排序...

my_array = [10,20,30,5,1,8,2,14,6,29] #main array
if len(my_array) > 0:
    my_array.sort() #sorting array(min to max)
    min = my_array[0] #after sorting get min value
    print(min) #print min value
else:
    print("array is empty")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2021-02-24
    • 2012-04-18
    • 1970-01-01
    • 2021-10-10
    • 2016-12-21
    • 2016-09-04
    相关资源
    最近更新 更多