2014-02-07 3 views
2

저는 C/C++에서 오는 Python의 멍청한 사람입니다. Beaglebone Black에 연결된 가속도계로 작업하고 있습니다. I 여섯 개 판독 세트로부터 X, YZ 대한 최소 및 최대를 찾아야Python 2.7 목록 목록에서 최소, 최대 찾기

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

: I는 가속도계 6의 X, Y, 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] 

이것은 작동하는 것 같다,하지만 그냥 "파이썬"보이지 않는다. 이것을하기위한 더 깨끗한 방법이 있어야합니다. 어떤 충고?

+0

'listOfNumbers.sort() [: 3]'와 같이 측정 값을 정렬하고 처음 세 번째 값을 취할 수 있습니다. 'someList [-3 :]'에 의해리스트의 마지막 세 원소를 얻을 수있다. 그러나 당신이 숫자를 다루는 경우 속도를 위해'numpy'를 사용하는 것이 좋습니다. –

+0

@AleksanderLidtke, 독립적 인 x, y 및 z 문제를 해결하지 않습니다 – mhlester

+0

3 가지 기준에 따라 정렬하기위한 사용자 지정 기준이 필요합니다. –

답변

13

첫째, 당신에게 x, yz 목록의 목록을 제공하는 목록을 다시 매핑 :

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

관련 문제