【问题标题】:Can anyone tell me what is wrong here in this loop?谁能告诉我这个循环有什么问题?
【发布时间】:2021-12-08 06:10:11
【问题描述】:
 #vl = [40.08, 36.6, 41.0, 35.2, 41.0]  
indices = []                 
for x in vl:
    if x == max(vl):
        indices.append(vl.index(x))
print(indices)

**这里最大元素 41 在列表中的索引 2 和 4 处出现了 2 次。因此,这些索引应该附加到列表索引中。我得到的输出是 [2,2] 而不是 [2,4]。谁能告诉我这段代码有什么问题? **

【问题讨论】:

  • .index 还返回列表中值的第一个索引。由于值相等,因此两次返回相同的索引。
  • @MegaIng 谢谢!请告诉我我可以在这里使用哪种方法来获得我正在寻找的输出。提前致谢!
  • for x in range(len(vl)): if vl[x] == max(vl): indices.append(x) print(indices)
  • ????????上面的代码对我有用
  • 查看enumerate(vl)

标签: python-3.x list loops


【解决方案1】:

你得到[2, 2] 因为index() 总是会给你第一个匹配的索引。

我想您想在这里查看enumerate(),因为它会为您提供您正在寻找的索引以及值。

通过列表理解:

vl = [40.08, 36.6, 41.0, 35.2, 41.0]
indices = [index for index, value in enumerate(vl) if value == max(vl)]
print(indices)

通过传统循环:

vl = [40.08, 36.6, 41.0, 35.2, 41.0]
indices = []
for index, value in enumerate(vl):
    if value == max(vl):
        indices.append(index)
print(indices)

两者都应该给你:

[2, 4]

【讨论】:

  • 谢谢!这很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2017-12-11
  • 2011-01-07
  • 2018-05-15
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
相关资源
最近更新 更多