【问题标题】:when i start for loop, the loop getting 0,0,1,2,3.. instead of 0,1,2,3当我开始 for 循环时,循环得到 0,0,1,2,3.. 而不是 0,1,2,3
【发布时间】:2021-12-18 03:20:53
【问题描述】:
if __name__ == '__main__':

    l=[]
    s=[]
    for _ in range(int(input())):
        name = input()
        score = float(input())
        l.append(name)
        s.append(score)
    mx=max(s[0],s[1])
    smin=min(s[0],s[1])
    n=len(s)
    for i in range(2,n):
        if(mx>s[i]):
            smin=mx
            mx=s[i]
        elif(s[i]<smin) and \
        max!=s[i]:
         smin=s[i]
    ind=smin
    sminval=s.index(ind)
    g=0
    for i in range(n):
        index_sec=s.index(s[i])
        print(index_sec)
        if(smin==s[i])and\
         sminval!=index_sec:
            x=s[i]   
        g=g+1
    y=l[sminval]

输入

5
Harry
37.21
Berry
37.210
Tina
37.2
Akriti
41
Harsh
39

输出

0
0
2
3
4    

虽然我得到了这种类型的索引值(i)。我无法找到正确的元素索引, 我需要解释为什么会这样?

【问题讨论】:

  • mxsmin 应该包含什么?我不明白设置它们的if 语句中的逻辑。
  • index() 返回第一个匹配值的索引。如果列表中有重复项,您将获得它们中最低的索引。
  • 您的列表在索引 0 和 1 中有 37.21,因此它会打印两次 0

标签: python python-3.x list for-loop


【解决方案1】:

这不是非常结构化的代码,因此很难弄清楚您真正想要它做什么。我不能为你修好。但是,如果您想知道发生了什么,这里有一个演练。

index_sec=s.index(s[i])”行将返回列表“s”中与位置 i 处找到的值匹配的第一个索引。只有s 中的所有分数都是唯一的,这才是唯一索引。

但是,Harry 和 Berry 的得分均为“37.2”。因此,当您查找 Harry 分数的索引,并查找 Berry 分数的值时,您将不会得到 Harry 和 Berry ......您将得到列表中的第一个......在这种情况下是 Harry ...... . 两次。

换一种说法,当你拿哈利的分数查一下,你就得到了哈利。但是,当您获取 Berry 的分数并进行查找时,您也会得到 Harry,因为 Harry 是列表中第一个具有该分数的项目。由于 Harry 在索引 0 中,因此结果是“0”后跟“0”。

【讨论】:

  • 问题是我需要找到第二个最小值,并且还需要找到是否有相同的第二个分数,所以我使用 for 循环来检查是否有人具有相同的值哈利。我收到了上面提到的错误
  • 从技术上讲,您没有遇到错误。你得到的是你没想到的行为。但是,您并没有真正解释代码的总体用途以及输出错误的原因……因此无法评论修复代码的正确方法。
  • 也许不是最优雅的方式,但如果您仍在努力,一种方法是不要使用列表的“索引”方法来查找您想要的内容。相反,编写您自己的函数。您的自定义函数可以返回所有匹配项而不是第一个匹配项,然后您可以更改代码以期望得到答案列表而不是单个值。
【解决方案2】:

说实话,我也不知道发生了什么,目标是什么。 我只能说,你错误地使用了 max() 和 min() 方法。 您要查找的是 list 的第一项和 s 的第二项之间的最大值和最小值。 你的意思是:

mx=max(s[0],s[len(s)-1])
smin=min(s[0],s[len(s)-1])

但是,这也是不正确的,因为这只会检查第一项和最后一项之间。但是你想要所有物品中最大的。 所以正确的语法是:

mx=max(s)
smin=min(s)

除此之外,我真的无能为力,因为我不知道代码的范围是什么。

【讨论】:

  • 问题是我需要找到第二个最小值,所以我使用 mx 来找到前两个数字的最大值,类似 smin 来找到前两个数字的最小值。然后我用for循环来找到第二个最小值。然后在我再次使用 for 来查找是否有任何与第二个最小值相同的数字。因为我收到了上面提到的错误。对不起,我对 python 完全陌生,
猜你喜欢
  • 2012-08-31
  • 2021-10-18
  • 2011-10-06
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多