在没有计数方法的情况下,我如何找到某项在函数中出现的次数?

How do I find how much times something appears in a function without the count method?

我不太确定如何解释它,但我需要弄清楚如何在不使用 count 方法的情况下找到某项在函数中出现的次数。现在我有:

def contains(list_to_check, number):
  value_amount = 0

  for value in list_to_check:
    if value == number:
      value_amount += 1
      return value_amount
    else:
      if value != number: 
        return 0
        

print(contains([4, 5, 6, 7, 8, 8, 4, 4, 2], 8))
        

而且我基本上需要弄清楚如何制作它 return 2 因为有 2 个 8。

你的函数可以简化为只有一个return out of loop

def contains(list_to_check, number):
        return sum([x==number for x in list_to_check])

print(contains([4, 5, 6, 7, 8, 8, 4, 4, 2], 8))

您的解决方案接近正确答案,因为它遍历输入列表并将列表中的项目 (value) 与输入参数 (number) 进行比较。但是,return 语句使函数在第一次迭代时退出迭代。您可以打开 this link 并单击“下一步 >”按钮以查看 python 如何执行您的代码。

为了修复代码,您应该将 return 语句移动到函数的末尾,以便在 python 退出函数之前遍历所有项目。

def contains(list_to_check, number):
  value_amount = 0

  for value in list_to_check:
    if value == number:
      value_amount += 1

  return value_amount
    

print(contains([4, 5, 6, 7, 8, 8, 4, 4, 2], 8))

虽然上述解决方案有效,但我会重构(即提高代码的可读性而不改变其行为)函数并编写以下函数:

def count_values(list_to_check, query):
    count = 0

    for value in list_to_check:
        if value == query:
            count += 1

    return count
    

print(count_values([4, 5, 6, 7, 8, 8, 4, 4, 2], 8))

最后,请注意上述功能可能无法正常处理许多 non-integer 个号码。例如,count_values([0.3], 0.1+0.2) returns 0,而它应该 return 1。请参阅 this article 以获得进一步的解释。为了解决这个问题,如果您的函数可以接受 non-integer 个数字,您可以使用以下函数:

from math import isclose
from numbers import Number

def count_values(list_to_check, query):
    count = 0

    for value in list_to_check:
        if value == query or (
            isinstance(query, Number) 
            and isinstance(value, Number) 
            and isclose(value, query)
        ):
            count += 1

    return count
    

print(count_values([4, 5, 6, 7, 8, 8, 4, 4, 2], 8))