отличать двузначное число от однозначного в 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)))
→ Ссылка