我有以下 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
)。所以:
在以下情况下True
if 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]]