разбить строку на положительное и отрицательное число python? - PullRequest
2 голосов
/ 28 января 2020

Я хочу иметь возможность разбить что-то вроде этого:

"20 - 5 - 4 + 10 + 4"

либо в один список как числа со знаком:

["20", "-5", "-4", "+10", "+4"]

, либо как два списка без знака:

["20", "10", "4"]
["5", "4"]

есть ли встроенный метод, который я могу использовать, чтобы сделать это в python?

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Вы можете использовать re.findall:

import re
s = "20 - 5 - 4 + 10 + 4"
new_s = re.findall('[-+]?\d+', s.replace(' ', ''))

Выход:

['20', '-5', '-4', '+10', '+4']
0 голосов
/ 28 января 2020

Без regex, но сломался бы, если бы не было пробелов или других операторов.

expr = "20 - 5 - 4 + 10 + 4"
tokens = expr.split()
if tokens[0].isnumeric():tokens = ['+'] + tokens
tokens = [''.join(t) for t in zip(*[iter(tokens)]*2)]
pos = [t.strip('+') for t in tokens if '+' in t]
neg = [t.strip('-') for t in tokens if '-' in t]

Или, как @Sayse предложил:

tokens = expr.replace('- ','-').replace('+ ','+').split()
pos = [t.strip('+') for t in tokens if '-' not in t]
neg = [t.strip('-') for t in tokens if '-' in t]
...