2014-02-07 112 views
2

我是Python的noob,來自C/C++。 我正在使用連接到Beaglebone Black的加速度計。我收集6 [X,Y,Z]讀數加速度計爲:Python 2.7在列表中找到最小值,最大值

calib = [[-72, -80, -673], [-31, -1673, 481], [-29, -62, 1564], [-148, 1464, 545], [-1513, -67, 539], [1350, -80, 480]] 

我需要從該組六個讀數找到XY,並且Z的最小值和最大值。 我的代碼是:

max = [0] * 3 
min = [0] * 3 

for ndx, sample in enumerate(calib): 
    x, y, z = calib[ndx] 
    if x > max[0]: 
     max[0] = x 
    if x < min[0]: 
     min[0] = x 
    if y > max[1]: 
     max[1] = y 
    if y < min[1]: 
     min[1] = y 
    if z > max[2]: 
     max[2] = z 
    if z < min[2]: 
     min[2] = z 

print "min", min 
min [-1513, -1673, -623] 

print "max", max 
max [1350, 1464, 1564] 

這似乎是工作,但只是不看「Python化」。必須有一個更乾淨的方法來做到這一點。有什麼建議?

+0

您可以對測量值進行排序,並取前3個,如下所示:'listOfNumbers.sort()[:3]'。你可以通過'someList [-3:]'得到列表的最後三個元素。但是,如果你正在處理數字,我會推薦使用'numpy'來提高速度。 –

+0

@AleksanderLidtke,它不能解決獨立的x,y和z問題 – mhlester

+0

您需要有一個自定義標準,以便根據3個條件進行排序。 –

回答

13

首先,重新映射列表給你的xy,並且z列出一個清單:

xyz = zip(*calib) 

然後最小值和最大值映射到列表:

>>> map(min, xyz) 
[-1513, -1673, -673] 

>>> map(max, xyz) 
[1350, 1464, 1564] 

或者作爲一個列表理解:

>>> [(min(a), max(a)) for a in zip(*calib)] 
[(-1513, 1350), (-1673, 1464), (-673, 1564)] 
+1

我會爲你投票支持列表理解的想法,如果它讓我。謝謝。 – RayZ

相關問題