2014-09-05 52 views
0

我使用蟒2.7用於從串行端口數據繪製在陣列的不同值分開更好的方法來在python

串行數據是在以下(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型和存儲的值的更多更快的方式。

感謝

+0

什麼是'a2'和'a4'? – 2014-09-05 10:42:05

+0

a2 = deque([0.0] * 384),a4 = deque([0.0] * 384) – user3805148 2014-09-05 11:28:14

+0

您是否試圖保持'a2'的長度不變?由於您的'len' len(x)-1'項,您的當前代碼將'a2'的長度增加1,但是由'len(x)'項擴展。 – unutbu 2014-09-05 12:27:04

回答

0

這裏的列表內涵的缺點是,你遍歷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 

而不是一次刪除一個項目。

+0

我建議使用具有最大長度的'collections.deque'來保持某個序列的長度不變。 (我猜這就是實際意圖。) – 2014-09-05 10:45:14

+0

@SvenMarnach我會說這值得單獨回答 – jonrsharpe 2014-09-05 10:45:41

相關問題