计算 if 循环的迭代次数



我有以下 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 循环所做的是读取名为"内容"的列表的每一行,并在检测到单词"无数据"时将它们替换为零值。我想做的是计算此更改的次数;我已经尝试了以下内容:

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

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

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

在以下情况下Trueif line.find("No Data")

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

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

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

if "No data" in line:

if line.find("No Data")永远是正确的。只需将其更换if line.find("No Data") is not -1

您还可以使用in运算符:

if "No Data" in line: 
#do stuff

我希望它有所帮助。

如果一行中有多个"无数据"实例,并且您希望计算所做的替换总数,而不是至少有一个替换的行数:

使用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")

在λ中执行:

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]]

最新更新