Вернуть элемент списка из нулевого значения, используя понимание списка - PullRequest
1 голос
/ 04 мая 2019

Я использую понимание списка, чтобы получить список числовых значений, разделенных точкой с запятой, ;, внутри строки.

Мне нужно получить 0 из пропущенных значений по обе стороныточки с запятой.

Пример строки без пропущенных значений:

   job_from_serial_st = 'xxxxx\rxxxxxx\rxxxx\rGAX=77.00;85.00\rxxxxx\r'

Используя мое понимание списка, я получил бы следующий список значений: [7700, 8500]

Но как можноЯ получаю список значений из строк, таких как 'GAX=77.00;\r' или 'GAX=;85.00\r'?

Я ожидаю получить следующие списки из примеров строк с пропущенными значениями:

[7700, 0] или[0, 8500]

def get_term(A, B, phrase):   

    n = A.len()
    start = phrase.find(A) + n
    end = phrase.find(B, start)
    term = phrase[start:end]

    return term


# GET GAX NUMBER 
gax_nums = get_term(r'GAX=', r'\r\x1e\x1d', job_from_serial_st)
gax = [int(float(x) * 100) for x in gax_nums.split(';')]
print(gax)

1 Ответ

1 голос
/ 04 мая 2019

Вы можете добавить условие к пониманию списка, чтобы оно возвращало 0, если до или после точки с запятой нет числа (также заменили вашу функцию серией разбиений для получения чисел из строки).

s = 'xxxxx\rxxxxxx\rxxxx\rGAX=77.00;\rxxxxx\r'
nums = s.split('GAX=')[1].split('\r')[0].split(';')

gax = [int(float(n) * 100) if n else 0 for n in nums]

print(gax)
# [7700, 0]
...