Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа. [RSS Feed]

#1 Фев. 14, 2018 04:39:43

svatty
Зарегистрирован: 2018-02-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа.

Встретил пример, питон тьюторе в разделе, посвященном изучению массивов и операций с ними такой любопытный код, который я понимаю интуитивно - что он именно делает. Не понятно значение только одной конструкции. Поясните мне его, пожалуйста.

# дано: s = ‘ab12c59p7dq’
# надо: извлечь цифры в список digits,
# чтобы стало так:
# digits ==

s = ‘ab12c59p7dq’
digits =
for symbol in s:
if ‘1234567890’.find(symbol) != -1:
digits.append(int(symbol))
print(digits)

Что значит != -1? Оператор != означает, насколько помню, верно, что не равно.
Почему, если в коде меняешь значение параметра с -1 на другой, интерпретатор выдает ошибку, что невозможно преобразовать строку “а” в целое число? Загадочная роль конструкции не гуглится. Я смутно понимаю, что -1 один здесь скорее всего описывает ход по массиву s слева-направо, проверяя встречается ли какой нибудь из символов в рамках конструкции if в строке или нет. Если нет, начинается новая итерация. Вопрос: она задается этим выражением != - 1 или что это тогда значит?
Вопрос наверняка очень глупый, но тем не менее, прошу на него ответить.
С уважением. И всем привет.

Офлайн

#2 Фев. 14, 2018 06:15:13

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа.

Из документации: help(str.find) – следует, что метод find находит минимальный индекс, с которого данная подстрока входит в строку, к которой этот метод применяется. Если такой индекс не найден, то возвращается -1.

Например:

'bubble gum'.find('gu') ==> 7
'bubble gum'.find('c') ==> -1 # так как <c> нету в строке <buuble gum>

Таким образом, условие: <if ‘1234567890’.find(symbol) != -1 > означает, что текущий символ входит в строку <123…0>,
т.е. означает, что символ – это цифра.
Также это условие можно было бы заменить на <if symbol.isdigit():>

Офлайн

  • Начало
  • » Центр помощи
  • » Использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version