Чтобы получить непрерывные группы предметов, используя функцию, чтобы определить, к какой группе принадлежит каждый предмет, используйте itertools.groupby
. В вашем случае вам (предположительно) нужны непрерывные наборы цифр и не цифр, поэтому key
равно isdigit()
, примененное к каждому из символов в вашей входной строке.
Количество цифр может быть переменным, буквенная часть не обязательно должна начинаться с A
, и вы на самом деле можете иметь любую последовательность цифр и букв в любом порядке: groupby
разберет его.
Результатом groupby
будет итератор (поэтому вы должны преобразовать его во что-то определенное, такое как список), в формате "key
результат, групповой объект ". Вы можете увидеть, что isdigit
правильно сработал для всех символов, распечатав немедленный результат:
from itertools import groupby
l = ['123Abc','234Asx','456Aio']
print ([(i,list(j)) for i,j in groupby (l[0], key=lambda x:x[0].isdigit())])
, то есть
[(True, ['1', '2', '3']), (False, ['A', 'b', 'c'])]
Преобразование list(j)
обратно только в одну строку нужен join
. Вы не хотите знать , есть ли у список цифр или нет, поэтому вы можете отбросить логический результат и сохранить только строки. Это
print ([''.join(j) for i,j in groupby (l[0], key=lambda x:x[0].isdigit())])
дает
['123', 'Abc']
для первого элемента в вашем списке, и если желаемый результат - список для каждого элемента в вашем текущем списке, добавьте итерацию вокруг этого :
print ([[''.join(j) for i,j in groupby (item, key=lambda x:x[0].isdigit())] for item in l])
возвращает
[['123', 'Abc'], ['234', 'Asx'], ['456', 'Aio']]