Я знаю, например, как конвертировать:

'1-2=3^4/5' -> [1, '-', 2, '=', 3, '^', 4, '/', 5]

Но если, скажем, я хочу преобразовать:

'12-34=56^78/90' -> [12, '-', 34, '=', 56, '^', 78, '/', 90]

Тогда у меня проблемы.

Я пробовал несколько вещей, и это никогда не работало идеально - либо был крайний случай, когда он не работал, либо были проблемы. Например, одна из моих проблем заключалась в том, что цифры после 1-го числа int повторялись как новые элементы.

Я был бы очень признателен, если бы кто-нибудь нашел время, чтобы помочь мне.

Спасибо заранее!

РЕДАКТИРОВАТЬ: Спасибо всем за быстрые ответы! Однако я новичок в программировании и, следовательно, не знаком с используемыми модулями или методами. Можно ли это сделать, используя только встроенные функции?

0
juicy 15 Окт 2021 в 20:35

3 ответа

Лучший ответ

Два других ответа намного лучше. Но если вы чувствуете себя обязанным сделать это без какого-либо импорта, вот решение.

s = '12-34=56^78/90'

output = []
section = []
for e in s:
    try:
        e = int(e)
        section.append(e)
    except ValueError:
            output.append(''.join(map(str,section)))
            output.append(e)
            section = []
            
output.append(''.join(map(str,section)))
1
Chris 15 Окт 2021 в 18:12

Простой шаблон, который выбирает либо несколько цифр, либо не цифру, сделает это.

pat = re.compile(r"\d+|\D")

parts = pat.findall("1-2=3^4/5")
print(parts)  # ['1', '-', '2', '=', '3', '^', '4', '/', '5']

parts = pat.findall("12-34=56^78/90")
print(parts)  # ['12', '-', '34', '=', '56', '^', '78', '/', '90']
4
azro 15 Окт 2021 в 17:43

Используйте itertools.groupby для группировки по последовательным цифрам ( используя str.isdigit)

from itertools import groupby

s = '12-34=56^78/90'

res = ["".join(group) for k, group in groupby(s, key=str.isdigit)]
print(res)

Вывод

['12', '-', '34', '=', '56', '^', '78', '/', '90']
1
Dani Mesejo 15 Окт 2021 в 17:37