Лучший способ разделить разные значения в массивах в Python

Я использую Python 2.7 для вывода данных из последовательного порта

Серийные данные представлены в форме, приведенной ниже (тип X и тип Y)

27Y 27Y 12X 0X 25Y 26Y 153X 214X 29Y 28Y 29Y 28Y 139X 154X 249X 196X 0X 2X 27Y 27Y 25Y 25Y 26Y 26Y 175X 242X 26Y 27Y

Я использую следующий код для разделения данных и хранения в двух разных массивах:

 # Read from serial port, blocking
 data =ser.read(1)
 data1=(data)


 # If there is more than 1 byte, read the rest
 n = ser.inWaiting()
 data1 = (data1 + ser.read(n))
 l = data1.split( )

 x = [d.strip("X") for d in l if d[len(d)-1] != "Y"]
 y = [d.strip("Y") for d in l if d[len(d)-1] != "X"]



 for i in range(0,len(x)-1):
    del a2[i]


 for i in range(0,len(x)-1):
    del a4[i]


 a2.extend(x)


 a4.extend(x)

Выше код является только частью полного кода, необходимого для разделения значений

Есть ли какой-то лучший и более быстрый способ разделения значений типов X и Y и хранения в разных массивах.

Спасибо

1 ответ

Недостатком понимания списка здесь является то, что вы перебираете l дважды, тогда как вы могли бы сделать это один раз:

x = []
y = []
for d in l:
    if d.endswith("X"):
        x.append(d[:-1])
    else:
        y.append(d[:-1])

Явный срез может быть немного быстрее, чем strip, так как не нужно проверять первые или предпоследние символы строки. Вы могли бы сделать, например,

a2 = a2[len(x):] + x

вместо удаления одного элемента за раз.

Другие вопросы по тегам