【问题标题】:using readlines() and count() in a "for" loop?在“for”循环中使用 readlines() 和 count()?
【发布时间】:2019-03-14 11:22:25
【问题描述】:

在Codio中,有一个取文件的挑战,搜索a的次数 字符串出现在其中,然后打印该数字。我能够使用一些建议得到结果,但我仍然不清楚一些事情。

主要问题是,循环在什么时候搜索子字符串S?我随处可见的count() 语法涉及使用要搜索的字符串,后跟点运算符,然后是带有我们要查找的子字符串作为参数的函数。它看起来像:P.count(S)

让我困惑的是该函数使用line 代替P。那么这是否意味着该函数正在搜索line 的子字符串?如果是这样,如果line 只是for 循环的计数器变量,那它是如何工作的?我只是想更清楚地了解这个函数在这种情况下是如何工作的,以便让我得到子字符串S 出现在文件P 中的正确次数。

import sys
P= sys.argv[1]
S= sys.argv[2]

# Your code goes here

f = open(P, 'r')
c = 0

for line in f.readlines():
  c += line.count(S)

print(c)

【问题讨论】:

  • 如果S 是您尝试在文件P 中计算出现次数的子字符串,那么当您调用line.count(S) 时,它会计算S 在字符串中出现的次数lineline 不是 for 循环的计数器,它是 for 循环遍历的 f.readlines() 返回的列表中的每个单独的行字符串。

标签: python string function for-loop readlines


【解决方案1】:

这是否意味着函数正在为子字符串搜索“行”

是的,就是这个意思。 line 的值在每次循环迭代中都会发生变化。

如果是这样,如果“line”只是“for”循环的计数器变量,那它是如何工作的

不是。 Python for 循环没有计数器。 line 是实际的文本行。

for letter in ['A', 'B', 'C']:
    print(letter)

打印

一种 乙 C

【讨论】:

  • 关于“Python for 循环没有计数器”:您可以使用 for index, item in enumerate(collection) 同时获取索引/计数和项目来实现这一点。
  • 我预料到了这个评论。是的,您可以循环生成 (number, value) 元组。该循环 still 没有计数器。通过可以称为幸福的意外,number 与项目索引相关,但它不是循环计数器。
【解决方案2】:

让我们剖析一下循环:

for line in f.readlines():
  c += line.count(S)

f 是您打开文件的文件描述符。

readlines 是一个 generator,一种返回文件行的函数。如果您将其视为一个字符串列表,每个字符串都是文件的一行,那么您将足够接近理解循环操作。

因此,for line in f.readlines(): 语句通过文件内容迭代变量line;在每次循环迭代中,line 将是适当的字符串值,即文件的下一行。

因此,line.count(S) 返回目标字符串S 在该文件行中出现的次数。增量 c += 将其添加到您的计数器中。

这样说清楚了吗?


顺便说一句,请学习使用描述性变量名称。从长远来看,混合大小写的单字母名称是一个坏习惯。

【讨论】:

  • 关于变量名,它们并不是我的全部。其中一些是由 Codio 预先加载的,无论我所学的课程都是为它设置的。不过感谢您的提示。
  • 很高兴听到这个消息。作为一般政策,我建议避免表现出不合标准做法的“教育”网站。有很多“编码挑战”网站。
  • 是的,不幸的是我是一个编码新手。因此,我正在上一门针对初级 Python 的大学课程。这个 Codio 网站是他们用来阅读材料以及学习目标和挑战的地方。我可能会尝试一些外部的东西来加强我对这些语言的理解。
  • 另外,我遇​​到的问题是我在我发布的这段代码和之前的代码之间混淆了,这些代码涉及使用带有关键字“in”和“range”的“for”循环。例如:对于范围 (0, 6) 中的 x: .我教我的书在这种示例中使用“计数器”一词来描述变量“x”。不过,我认为它并不适用于“for”循环的每个实例。
猜你喜欢
  • 2014-07-02
  • 2016-12-12
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2018-09-13
相关资源
最近更新 更多