【问题标题】:IF statement for repeating elements [duplicate]重复元素的 IF 语句[重复]
【发布时间】:2026-02-12 19:30:02
【问题描述】:

我有一个有趣的问题: 假设我们有lst = [1,2,3,4,5,5,5,5,5,6,7,8] 我有兴趣说 if 语句只返回 第 3 次 5 的结果。
例如:

for i in range(0,lent(lst)):
   if lst[i]==5:
      print(i,"is index of 1st 5")
      break

但是如何在没有附加参数或列表的情况下询问是否显示 3rd 5 的索引?

【问题讨论】:

  • 无论如何,在这里你可以保持 count fo 你见过的五的数量,然后打破条件list[i] == 5 and count == 2。请注意,这意味着您看到的是第 3 个 5,因为您已经数了 2
  • 如果我一次告诉你一个数字列表,你会如何手工解决这个问题?您应该使用您最熟悉的任何书面语言用文字描述这些步骤。一旦你对如何自己解决问题有了很好的理解,告诉计算机如何去做就会更容易。

标签: python if-statement


【解决方案1】:

for 循环内的if 下使用嵌套的if 语句。

因此,您的代码应该是这样的:

count = 0
for i in range(0,len(lst)):
   if lst[i] == 5:
      count += 1
      if count == 3:
         print(i,"is index of 3rd 5")
         break

【讨论】:

    【解决方案2】:

    这应该符合您的需求

    counter = 0
    for item in lst:
        if item == 5:
            counter += 1
        if counter >= 3:
            break
    

    【讨论】:

      【解决方案3】:

      您可以在列表上使用 enumerate 并获取所需元素的所有索引,然后您将获得所需的任何索引

      lst = [1,2,3,4,5,5,5,5,5,6,7,8]
      occurances = [idx for idx, val in lst if val == 5]
      occurances[0] # first occurance
      occurances[1] # second occurance
      occurances[2] # third occurance 
      

      【讨论】:

        【解决方案4】:

        juanpa.arrivillaga 已经指出了通常的解决方案。
        但是,例如numpy 你也可以用另一种方式:

        import numpy as np
        lst = np.array([1,2,3,4,5,5,5,5,5,6,7,8])
        
        cnt5 = (lst==5).cumsum()
        np.arange(len(lst))[cnt5==3][0]
        
        # 6
        

        cnt5 是布尔数组的累积和,仅在 lst 具有 5 的索引处为 True,即:它是 lst 的 5 的计数器的数组。
        那么你只需要这个数组是3的索引。

        【讨论】: