Как разбить список на подсписки?
Всем привет, желаю всем хорошего дня. У меня возникла проблема, если кто знает как ее решить и имеет время помогите, пожалуйста.
У меня есть такой список
['-5 -50', '-2 -15 .5', '50;-2e2', '-1 -12', '0,-40']
Мне нужно удалить все ненужные элементы такие как , . ; лишние пробелы и также элементы если их больше 2 как здесь '-2 -15 .5'.
Я пробовала сделать вот это
d=['-5 -50', '-2 -15 .5', '50;-2e2', '-1 -12', '0,-40']
import re
for i, line in enumerate(d):
d[i] = [int(num) for num in re.split(r'[\s.,;]', line)[:2]]
print(d)
Но у меня есть ошибка
ValueError: invalid literal for int() with base 10: ''
Мне нужно получить вот это
[[-5, -50], [-2,-15], [50, -200], [-1, -12], [0,-40]]
Также я знаю что если сделать так
from decimal import *
print(int(Decimal('-2e2')))
Мы получим -200
Ответы (2 шт):
Если можно использовать регулярные выражения, то так:
import re
a = ['-5 -50', '-2 -15 .5', '50;-2e2', '-1 -12', '0,-40']
res = [list(map(int,[y for y in re.split(r"[^-\d]", x) if y][:2])) for x in a]
res:
[[-5, -50], [-2, -15], [50, -2], [-1, -12], [0, -40]]
UPDATE
Я не заметил сначала в исходных данных числа, записанного в экспоненциальной форме. Для его обработки придется добавить еще одно преобразование и изменить шаблон регулярки, потому как преобразование сразу в int с такими числами работать не будет:
res = [list(map(int,(map(float,[y for y in re.split(r"[^-\w]", x) if y][:2])))) for x in a]
res:
[[-5, -50], [-2, -15], [50, -200], [-1, -12], [0, -40]]
import re
def parts(txt: str):
p = re.findall(
r'-?[\de.]+',
txt
)
items = []
for item in p:
try:
items.append(int(item))
except (TypeError, ValueError):
try:
items.append(int(float(item)))
except (TypeError, ValueError):
print(item)
continue
return items[:2]
a = ['-5 -50', '-2 -15 .5', '50;-2e2', '-1 -12', '0,-40']
print([*map(parts, a)])
# [[-5, -50], [-2, -15], [50, -200], [-1, -12], [0, -40]]