@LanskoyGames
У модераторов первое место, но только с конца...

Деление строки в список Python?

['[<rect(32, 16, 20, 20)>, <rect(48, 210, 20, 20)>, <rect(232, 178, 20, 20)>, <rect(362, 136, 20, 20)>, <rect(264, 183, 20, 20)>, <rect(144, 262, 20, 20)>, <rect(359, 140, 20, 20)>, <rect(287, 147, 20, 20)>, <rect(122, 266, 20, 20)>, <rect(368, 78, 20, 20)>, <rect(87, 32, 20, 20)>, <rect(46, 334, 20, 20)>, <rect(36, 4, 20, 20)>, <rect(129, 266, 20, 20)>, <rect(95, 72, 20, 20)>, <rect(211, 369, 20, 20)>, <rect(108, 379, 20, 20)>, <rect(277, 337, 20, 20)>, <rect(22, 262, 20, 20)>, <rect(212, 368, 20, 20)>]']


Как разделить на список, типа [ [1, 2, 4, 5], [5, 6, 7, 8]] или [ 1, 2, 4, 5, 5, 6, 7, 8] . Слышал, что нужно делать через split, но как разные символы - не знаю
  • Вопрос задан
  • 140 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Там список хранит данные о rect из pygame, это отрисовка поля

Так передавай данные так, чтобы их удобно было парсить. Простейший вариант - используй json.
Например, сначала генерируешь данные для отправки:
import json
# в словаре для отправки могут быть только числа, строки, bool, списки, словари, None.
# и никаких других объектов. Так что переделываем список rect в список списков.
# как из rect координаты добыть ищи сам
rects_to_send = [ [rect.x, rect.y, rect.w, rect.h] for rect in rectangles ]
data_to_send = {  # в словарь можно также добавить другие данные
  'rects': rects_to_send,
}
string_to_send = json.dumps(data_to_send, ensure_ascii=True)+'\n'
# дальше через сокет эту строку и передаёшь

Ну и чтение аналогично.
import json

received_string = ...  # это строка, которую ты получил из сокета
received_data = json.loads(received_string)
#received_data будет таким же словарём, как data_to_send выше
for x, y, w, h in received_data['rects']:
  ...  # рисуешь эти прямоугольники у себя
Ответ написан
С таким форматом данных регулярки придется использовать
тип так
PyDev console: starting.
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
a = ['[<rect(32, 16, 20, 20)>, <rect(48, 210, 20, 20)>, <rect(232, 178, 20, 20)>, <rect(362, 136, 20, 20)>, <rect(264, 183, 20, 20)>, <rect(144, 262, 20, 20)>, <rect(359, 140, 20, 20)>, <rect(287, 147, 20, 20)>, <rect(122, 266, 20, 20)>, <rect(368, 78, 20, 20)>, <rect(87, 32, 20, 20)>, <rect(46, 334, 20, 20)>, <rect(36, 4, 20, 20)>, <rect(129, 266, 20, 20)>, <rect(95, 72, 20, 20)>, <rect(211, 369, 20, 20)>, <rect(108, 379, 20, 20)>, <rect(277, 337, 20, 20)>, <rect(22, 262, 20, 20)>, <rect(212, 368, 20, 20)>]']


import re

rr = re.compile(r'<rect\((\d+), (\d+), (\d+), (\d+)\)>')
rr.findall(a[0])
[('32', '16', '20', '20'), ('48', '210', '20', '20'), ('232', '178', '20', '20'), ('362', '136', '20', '20'), ('264', '183', '20', '20'), ('144', '262', '20', '20'), ('359', '140', '20', '20'), ('287', '147', '20', '20'), ('122', '266', '20', '20'), ('368', '78', '20', '20'), ('87', '32', '20', '20'), ('46', '334', '20', '20'), ('36', '4', '20', '20'), ('129', '266', '20', '20'), ('95', '72', '20', '20'), ('211', '369', '20', '20'), ('108', '379', '20', '20'), ('277', '337', '20', '20'), ('22', '262', '20', '20'), ('212', '368', '20', '20')]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы