использование сравнительных операторов в нарезке строк - PullRequest
0 голосов
/ 22 февраля 2019

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

s='-123'

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

s[s[0] == '-':]

Какова цель использования сравнительного оператора == в части среза икакой будет полученная строка?

Полный код здесь:

def string_to_int(s):
    return functools.reduce(lambda running_sum, c: running_sum * 10 + 
         string.digits.index(c), s[s[0] == '-':], 0) * (-1 if s[0] == '-' else 1)

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Посмотрим.

s[0] == '-'

Это означает, что "является первым символом строки символ" - "? В вашем случае это True, а True эквивалентно 1.

Если вы замените это на одно, вы сможете лучше понять:

s[1:]

Таким образом, он вернет всю строку, кроме первого символа.

НО! Если это было False, какв s = "+123", тогда как False эквивалентно 0, он возвращает всю строку.

0 голосов
/ 22 февраля 2019

s[0] == '-' будет иметь значение True для строк, начинающихся с - и False в противном случае.True имеет числовое значение 1, False 0, поэтому эффект заключается в срезе с индекса 1 и далее, когда он начинается с - (пропуск -) или с 0в противном случае (ничего не пропуская, поскольку -) нет.

По сути, это слишком умный способ вырезать ровно один ведущий - из строки, если она существует.

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