【问题标题】:list.count() method returning count + 1 for the first value in iterablelist.count() 方法为可迭代的第一个值返回 count + 1
【发布时间】:2022-01-25 15:58:10
【问题描述】:

当我遇到这个问题时,我正在处理一个问题。让我通过一个简单的例子来解释:

a = ['hello', 'world']
print(a.count('hello')) #prints 1 correctly

但是……

a = "hello world"
for i in a.split():
    print(a.count(i))

#prints
#2 -> for 'hello' which is wrong, one more than actual value
#1 -> counts of elements from 2nd onwards are correct

如果我之前split它,它可以完美运行:

a = 'hello world'
a = a.split()
for i in a:
    print(a.count(i))

#correctly prints
1
1

所以我认为只有当我在 for 循环中直接使用 split 方法时才会出现问题,但我不知道为什么。

编辑:

我重新检查了它,它为长语句打印了错误的值,特别是对于这个。请使用以下语句检查:

“每个单词在这个句子中出现多少次每个单词乘以每个单词”

编辑 2:

即使我直接在 for 循环中拆分字符串,它并没有改变原始字符串,并且我在 for 循环内对原始字符串使用 count 方法,这导致错误和“如何”显示两个次。

感谢用户 Bobby 正确指出。

【问题讨论】:

  • 第一次尝试与第二次尝试的工作方式相同。请出示您的完整代码。无法重现。
  • 是的,请检查编辑。它不适用于更长的字符串
  • "how" 在您添加的新字符串中出现了两次。这是“表演”的一部分。
  • 是的,现在知道了。谢谢^^

标签: python list for-loop count


【解决方案1】:

函数count 用于字符串时会迭代整个字符串以进行任何匹配。它不关心“单词”。

"abc".count("ab") # 1

来自docs

str.count(sub[, start[, end]])

返回 [start, end] 范围内子字符串 sub 的非重叠出现次数。可选参数 start 和 end 被解释为切片符号。

在您的第一个示例中,您在字符串上使用count

但是,当用于列表时,它不会在项目之间进行部分匹配:

["a", "b", "c"].count("ab") # 0

来自docs

list.count(x)

返回 x 在列表中出现的次数。

这是您在第二个示例中所做的。您在列表中使用count。发生这种情况因为str.split 返回一个列表

所以这是您正在使用的两种不同的计数方法。一个用于字符串(第一个示例 - a 是一个字符串)和一个用于列表(第二个示例 - a 是从str.split 返回的列表)。

【讨论】:

  • 是的,正确。我的困惑是我什至不知道我在原始字符串上使用 count() 而不是在拆分列表上。
  • @Aniruddha789 我写了一些关于这些不同方法(str.countlist.count)的更多信息以及原因。祝你好运。
【解决方案2】:

在您的第一个示例中,a 从未更新过。即使在 for 循环中,您也拆分了 a,但这并没有更新 a。您可以直接验证这一点:

a = "hello world"
for i in a.split():
    print(a)
    print(a.count(i))

如果您想要拆分字符串,您需要像在第一个示例中那样将其保存到变量中。如果需要,您可以在 for 循环中执行此操作:

a = "hello world"
for i in b:=a.split():
    print(b.count(i))

【讨论】:

  • 非常感谢先生!这一切都清楚了。我一直在想这一定是一些非常琐碎的逻辑,就在这里。再次感谢!
  • for i in b:=a.split(): 很恶心
  • @juanpa.arrivillaga 你不喜欢海象操作员?
  • 没有,我没有。在前一行创建变量要清楚得多,在 for 子句中这样做的好处为零……这正是反对赋值表达式的人们所谈论的那种事情。
  • 不过最终还是见仁见智
【解决方案3】:

count 计算参数在列表中出现的次数。所以对于你的第一个例子:

a = ['hello', 'world']
print(a.count('hello'))

Hello 只在列表中出现一次。

a = ['hello', 'hello', 'world', 'hello', 'world']
print(a.count('hello')

将返回 3。

【讨论】:

    【解决方案4】:

    在我的 Python 3.10.0 机器上运行良好。 我在每个例子中都得到 1。 请提供更多信息,例如 Python 版本,也许我们会知道它在您的机器上运行的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多