计算if循环的迭代次数

时间:2019-02-21 13:12:05

标签: python loops if-statement

我有以下if循环:

for line in content[:-1]:
 # if the line has No Data in it
    if line.find("No Data"):
        line = line.replace("No Data", "0")

if循环的作用是读取名为“ Content”的列表的每一行,并在检测到“ No Data”一词时将其替换为零值。我想做的是计算此更改完成了多少次;我尝试了以下方法:

ctr=0
for line in content[:-1]:
    if line.find("No Data"):
        line = line.replace("No Data", "0")
        ctr +=1

但是我得到的是crt等于行的总值,而不是完成更改的次数。

3 个答案:

答案 0 :(得分:3)

str.find返回字符串的位置(如果找到)或-1。所以:

if line.find("No Data")True,在以下情况下:

  • 未找到(因为值-1
  • 数据不在行首

当数据在字符串中但在行的开头时,它是False

这是一个典型的错误。解决方案:不要使用find,因为您不在乎数据的位置,只需执行以下操作即可:

if "No data" in line:

答案 1 :(得分:0)

if line.find("No Data")将始终为真。只需将其更换if line.find("No Data") is not -1

您也可以使用in operator

if "No Data" in line: 
    #do stuff

希望对您有帮助。

答案 2 :(得分:0)

如果一行中有多个“无数据”实例,并且您要计算已进行替换的总数,而不是至少进行一次替换的行数:

使用count函数:

ctr=0
for line in content[:-1]:
    if line.count("No Data") > 0:
        line = line.replace("No Data", "0")
        ctr += line.count("No Data")

以lambda格式执行:

ctr = sum([line.count('No Data') for line in content[:-1]])
content = [line.replace("No Data", 0) for line in content[:-1]]

如果只想查找“无数据”的行数,则使用in条件:

ctr=0
for line in content[:-1]:
    if "No Data" in line:
        line = line.replace("No Data", "0")
        ctr += 1

或者:

ctr = len([line for line in content[:-1] if "No Data" in line])
content = [line.replace("No Data", 0) for line in content[:-1]]