【问题标题】:Find the smallest element in a list查找列表中的最小元素
【发布时间】:2014-08-03 10:27:35
【问题描述】:

我想找到列表a 的最小值。我知道有一个像min() 这样的函数来查找值,但我希望它与for-loop 一起工作。 我在if-Statement 中收到错误Index out of range,但我不知道为什么。

a = [18,15,22,25,11,29,31]
n = len(a)

tmp = a[0]
for i in a:
   if(a[i] < tmp):
      tmp = a[i]
      print(tmp)

【问题讨论】:

  • 因为for a in i 迭代列表的内容不是 索引a[18] 导致 IndexError
  • 附带说明,您可能希望将 print 移到循环之外,而不是内部。否则,您将打印出迄今为止看到的所有最低数字,除了第一个(所以它会打印15,然后是11……或者,如果你给它[1, 2, 3, 4],它什么也不会打印)。
  • 另外,不要在 if 条件周围加上括号。这是 Python,不是 C。
  • 为什么人们对此投反对票并投票结束?这怎么不是编程问题?当然,这是一个新手问题,但这并没有错。
  • @abarnert 看到 "I get the error Index out of range... but I don't know why" 也有点令人失望找出正在使用的索引,使用print 可以在几秒钟内解决这个“问题”。

标签: python element


【解决方案1】:

当您在 Python (for e in l:) 中迭代列表时,您不会迭代索引而是直接迭代元素。所以你应该写:

for e in a:
    if(e < tmp):
        tmp = e
        print(tmp)

【讨论】:

    【解决方案2】:

    如前所述,您混合了对元素的迭代和对索引的循环。元素迭代的解决方案已经提出,所以为了完整起见,我想写另一个解决方案:

    a = [18,15,22,25,11,29,31]
    n = len(a)
    
    tmp = a[0]
    for i in range(n):
        if(a[i] < tmp):
            tmp = a[i]
            print(tmp)
    

    编辑:根据下面的评论将xrange 更改为range

    【讨论】:

    • 考虑到 OP 似乎使用的是 Python 3 print 函数而不是 Python 2 print 语句,因此您不应在答案中使用 xrange
    • @abarnert 是的,你是对的。我使用 Python 2,但总是使用from __future__ import print_function,所以我错过了。
    • 无论如何我都会使用枚举
    • @PadraicCunningham:这里没有enumerate 的理由; i 的唯一用途是在 a[i] 中,因此您也可以使用 for e in a。我很确定 jure 只是在展示 OP 如何可以 如果你真的想用索引来做到这一点,而不是建议他应该这样做。
    • @abarnert,我不一定对这个案例感兴趣,我的意思是如果我要索引一个列表,我会使用 enumerate 而不是 range,OP 最好学习使用 enumerate
    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多