Как ввести список пар чисел в скобках и добавить их в два массива координат?
Нужно ввести пары чисел и добавить их в два массива координат X и Y. Ввод, например:
(0, 5), (1, 1), (2, 3), (3, 7), (4, 5), (5, 2), (6, 0), (7, 6)
Пока получается только убрать знаки:
string = input()
string = string.replace('(', '').replace(')', '').replace(",", '')
print(string)
Но как добавить их попарно в массив координат?
Знаю как делать вот такой ввод в столбик:
1 1
2 2
4 7
6 6
2 4
3 3
4 4
7 3
Код:
n = 8
x = []
y = []
for i in range(n):
new_x, new_y = [int(s) for s in input().split()]
x.append(new_x)
y.append(new_y)
Как сделать такое же для строки?
(0, 5), (1, 1), (2, 3), (3, 7), (4, 5), (5, 2), (6, 0), (7, 6)
Ответы (4 шт):
Автор решения: MaxU
→ Ссылка
Можно привести строку к виду "[[0, 5], [1,1], ...]" и после этого спарсить эту строку при помощи json.loads():
import json
s = "(0, 5), (1, 1), (2, 3), (3, 7), (4, 5), (5, 2), (6, 0), (7, 6)"
points = json.loads(f"""[{s.replace("(", "[").replace(")", "]")}]""")
print(points)
# [[0, 5], [1, 1], [2, 3], [3, 7], [4, 5], [5, 2], [6, 0], [7, 6]]
чтобы разнести координаты по отдельным кортежам:
x, y = zip(*points)
print(x)
# (0, 1, 2, 3, 4, 5, 6, 7)
print(y)
# (5, 1, 3, 7, 5, 2, 0, 6)
Автор решения: GrAnd
→ Ссылка
Можно распарсить регулярным выражением.
import re
s = "(0, 5), (1, 1), (2, 3), (3, 7), (4, 5), (5, 2), (6, 0), (7, 6)"
x,y = list(map(list, zip(*[list(map(int, pair)) for pair in re.findall(r"\((\d+)\s*,\s*(\d+)\)", s)])))
print(x)
print(y)
[0, 1, 2, 3, 4, 5, 6, 7]
[5, 1, 3, 7, 5, 2, 0, 6]
Ну или оно же, но в более понятном виде:
x,y = [],[]
for pair in re.findall(r"\((\d+)\s*,\s*(\d+)\)", s):
x.append(int(pair[0]))
y.append(int(pair[1]))
Автор решения: Qwertiy
→ Ссылка
import re
t = [int(x) for x in re.findall(r"\d+", input())]
a = t[::2]
b = t[1::2]
print(a)
print(b)
Автор решения: SergFSM
→ Ссылка
превратить заданную строку в список вы можете так:
pairs = eval(f'[{input()}]')
функция eval() вычисляет выражение переданное ей в виде строки, в данном случае получаем список.
а дальше вы уже знаете.
x, y = zip(*pairs)