Подсчитайте количество итераций цикла if - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть следующий цикл 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 голосов
/ 21 февраля 2019

str.find возвращает позицию строки, если она найдена, или -1.Итак:

if line.find("No Data") равно True, когда:

  • не найдено (потому что стоит -1)
  • данные не находятся в начале строки

Это False, когда данные в строке, но в начале строки.

Это классическая ошибка.Решение: не используйте find, так как вас не заботит положение данных, просто сделайте:

if "No data" in line:
0 голосов
/ 21 февраля 2019

Если в строке более одного экземпляра «Нет данных», и вы хотите подсчитать общее количество выполненных замен, а не количество строк, которые имеют хотя бы одну замену:

используя функцию 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]]
0 голосов
/ 21 февраля 2019

if line.find("No Data") всегда будет верным.Просто замените его if line.find("No Data") is not -1

Вы также можете использовать оператор in :

if "No Data" in line: 
    #do stuff

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...