【问题标题】:Why is my code not checking every value in list?为什么我的代码没有检查列表中的每个值?
【发布时间】:2020-09-27 11:18:23
【问题描述】:

我正在尝试检查某个值连续重复了多少次,但我遇到了一个问题,即我的代码没有检查就留下最后一个数字。

Ai = input()

arr = [int(x) for x in Ai.split()]
c = 0

frozen_num = arr[0]
for i in range(0,len(arr)):
    print(arr)
    if frozen_num == arr[0]:
        arr.remove(arr[0])
        c+=1
    else:
        frozen_num = arr[0] 
           
        
print(c)

假设我输入:1 1 1 1 5 5 我的代码将给出输出 5 而不是 6

我希望你明白我在说什么。我对 python 很陌生,而且这段代码还没有完成,后面的数字将被附加,所以我得到输出:[4, 2] 因为“1”重复 4 次,“5”重复 2 次。

已编辑 - 我不小心写了 6 和 7,而不是 5 和 6。

【问题讨论】:

  • 为什么应该是7?我上次检查时 4 + 2 是 6
  • range() 不包括最后一个元素。 range(3) → 0, 1, 2
  • 你能解释一下为什么1 1 1 1 5 5 的输出应该是 7 吗?有四个 1 和两个 5。
  • 另外,range 循环完全没有做任何事情,您每次都在比较 frozen_num(即 arr[0]arr[0]。你不应该使用 arr[i] 吗?
  • @KlausD。范围循环用于索引,而不是元素值。此外,range 中的 i 无论如何都没有被使用

标签: python list for-loop


【解决方案1】:

您可以使用Collections 模块的Counter 来测量不同数字的所有出现。

from collections import Counter
arr = list(Counter(input().split()).values())
print(arr)

输入为1 1 1 1 5 5的输出:

1 1 1 1 5 5
[4, 2]

【讨论】:

    【解决方案2】:

    如果你想坚持你的方法而不使用外部库,你可以添加一个 if 语句来检测你何时到达数组的最后一个元素并以不同于其他元素的方式处理它:

    Ai=input()
    arr = [int(x) for x in Ai.split()]
    L=[]
    c = 0
    frozen_num = arr[0]
    for i in range(0, len(arr)+1):
        print(arr)
        if len(arr)==1: #If we reached the end of the array
            if frozen_num == arr[0]: #if the last element of arr is the same as the previous one
                c+=1
                L.append(c)
            else: #if the last element is different, just append 1 to the end of the list
                L.append(c)
                L.append(1) 
        elif frozen_num == arr[0]:
            arr.remove(arr[0])
            c += 1
        else:
            L.append(c)
            c=0
            frozen_num = arr[0]
    print(L)
    

    输入

    [5,5,5,6,6,1]
    

    输出

    [3,2,1]
    

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多