查找列表中的两个最小值

阿尔瓦罗·马丁内斯

我试图将数字列表的两个最小值作为元组返回。然而,下一个代码不断返回列表的前两个值。

def test(): 
  list = [4, 5, 1, 9, -2, 0, 3, -5] 
  min1 = list[0]
  min2 = list[1]

  length = len(list)
  
  for i in range(1, length):
    if list[i] < list[0]:
        if list[0] < list[1]:
            list[i] = list[1]
        else:
            list[i] = list[1] 
    else:
        if list[i] < list[1]:
            list[i] = list[1]
    print(min1, min2)

    return (min1, min2) 

test()

控制台输出:

4,5

有没有办法通过迭代来做到这一点?

马丁·彼得斯

变量min1min2不更新,他们不是到列表中的第一个和第二个元素的引用,他们是那名在索引0和1的值引用时赋值发生您稍后改变list[0]list[1]没有关系。

在 Python 中,列表索引和变量都只是实际对象的引用想想像气球这样的 Python 对象,变量和索引只是与附加到气球的字符串相关联的标签。您可以将多个标签附加到气球上,但如果您不将标签移动到不同的气球,则绑定到旧气球其他标签不会跟随。

在这里,min1min2被捆绑到已有的气球01索引标签绑定到他们。稍后,当您分配给 时list[i],您将特定索引标签重新绑定到另一个气球,但min1min2标签没有更改。

作为旁注,这部分代码有一个相当明显的错误:

if list[0] < list[1]:
    list[i] = list[1]
else:
    list[i] = list[1] 

两个分支都做完全相同的事情,分配list[1]list[i].

您正在做的,否则即使你希望改变完全不正确的分配list[0]list[1]内环路将作出改变的价值观min1min2你正在改变list[i],在其他列表中的价值,这就是所谓的一个更小。

因此,对于i = 2, list[i]islist[2]list[2] < list[0]is true (1 < 4),然后您测试是否list[0] < list[1](也为 true,4 < 5),因此您执行list[i] = list[1]设置list[2] = 5list[0]设置设置为4list[1]设置为5设置为,并实际上丢弃1存在于list[2]前。

而不是与list[0]or比较list[1],让你的循环更新min1min2

# min1 is always smaller than min2
min1, min2 = list[:2]
if min2 < min1:
    min1, min2 = min2, min1

for i in range(1, length):
    if list[i] < min1:
        min1 = list[i]
    elif list[i] < min2:  # but equal to or greater than min1!
        min2 = list[i]

我还确保min1 < min2在开始时,这使得循环更简单,因为如果list[i] < min1不是真的那么它可能小于min2但你不需要min1第二次测试

请注意,我们将list[i]分配min1min2在这里,您想用您刚刚测试的值更新这两个变量,前提list[i]是确实比您之前的值小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找数组中两个最小值的索引

Python在具有两个条件的嵌套列表中查找最小值

在两个错误值的关联数组中查找最小值的键是相同的

查找不同行中的两个单元格中的最小值

从两个列表创建字典,但保持最小值

如何查找特定列中是否有两个或更多个相等的最小值

查找矩阵中两个值之间的局部最小值和局部最大值

查找两个numpy数组之间的绝对最小值,但保持符号

在另一列的两个条目之间查找一列的最小值

Python:比较两个列表,并用符号获取最大值和最小值

计算Less中两个值的最小值/最大值

在java中查找两个数组之间的公共最小值

在SQL中获取两个值中的最小值

从列表列表中查找“n”个最小值及其索引

如何在Postgres / SQL中获得两个整数的最小值/最大值?

从组中选择两个值中的最小值作为单个结果

在Scala中获取两个相似列的最小值或最大值

熊猫中两个工作表中的最小值

从 SQL 中的两个表中获取最小值?

在Python中查找列表的最小值,最大值

从值是对象列表的字典中查找最小值

如何计算两个表的日期的最小值?

在python中找到两个局部最小值

当b可以为null时,SQL查找两个日期时间值a,b的最小值

如何在列表中查找第二个元素的最小值

如何从numpy数组中获取两个最小值

如何在Swift中获得两个CGFloat的最小值?

Pyomo中两个布尔决策变量之间的最小值

Java 8:从列表中查找最小值的索引