我有以下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等于行的总值,而不是完成更改的次数。
答案 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]]