отличать двузначное число от однозначного в python строке
надо написать цикл, который при проходе по этой строке 'a3b4c2e10b1' сможет отличить 10 от 1 и 0. я уже пробовал проходиться по индексам, но на последнем элементе, выдает ошибку, что цикл вне строки, потому что проверяет значение которого нет - то есть выход за строку.
Ответы (1 шт):
Автор решения: Ekaterina Frolova
→ Ссылка
Используйте регулярные выражения - это проще всего
Вариант 1
>>> import re
>>> res = re.findall(r"([a-zA-Z])*(\d*)", 'a3b4c2e10b1')
>>> res
[('a', '3'), ('b', '4'), ('c', '2'), ('e', '10'), ('b', '1'), (' ', ' ')]
>>> letters, digits = [a[0] for a in res if a[0]], [a[1] for a in res if a[1]]
>>> letters
['a', 'b', 'c', 'e', 'b']
>>> digits
['3', '4', '2', '10', '1']
UPD: теперь регулярке плевать, в каком порядке идут буквы и цифры, но приходится избавляться от пустых значений некрасиво, оптимизацию оставляю вам)
Вариант 2
>>> a = "a3b4c2e10b1"
>>> digits = list(filter(None, re.split("[a-zA-Z]+", a)))
>>> letters = list(filter(None, re.split("\d+", a)))