나는 정렬 된 목록을 가지고있다. 실제로 x로 정렬 된 (x, y, z) 트리플의 거대한 배열이다. 내 목표는 x의 범위에 따라 조각으로 나누는 것입니다. 나는 지금은 동안을 잘못했기 때문에 작동하지 않습니다 물론 파이썬 while while while sorted list/array
for triple in hugelist:
while triple[0] >= minx and triple[0] < maxx:
#do some stuff
# when out of that range, increase endpoints to the next range
minx = minx + deltax
maxx = maxx + deltax
# do some other stuff
# and hopefully move to next triple
을하려고했는데, 나는 그 이유를 이해합니다. 그러나 나는 목록을 통해가는 길을 생각할 수 없다. hugelist는 약 600 개의 청크로 분해되는 약 2 백만 개의 트리플입니다. 가능한 한 순서대로 한 번만 전달하기를 바랍니다.
============================== 291 점 미니 목록을 사용하여
팀의 도움으로, 당신은 단순히 triple[0]
원하는 범위 내에 있는지 확인하는 if
을 사용할 수 있습니다
while xstart < len(heights):
xfinish = bisect.bisect_left(heights, (maxx, 0, 0), lo=xstart)
xslice = heights[xstart:xfinish]
print "xstart is ", xstart, " xfinish is ", xfinish
print "maxx is ", maxx, " xslice is ", xslice
maxx += deltax
xstart = xfinish
xstart is 0 xfinish is 291
maxx is 804.0 xslice is [(803.01, 1941.84, 0.74) (803.04, 1941.88, 0.45) (803.06, 1941.25, 0.0)
(803.07, 1941.01, 0.0) (803.07, 1941.52, 0.31) (803.09, 1941.16, 0.08)
(803.12, 1940.05, 0.0) (803.13, 1939.72, 0.3) (803.13, 1939.86, 0.11)
(803.13, 1940.29, 0.17) . . . (803.23, 1938.24, 0.2)
(803.23, 1938.25, 0.45) (803.23, 1938.29, 0.1) (803.23, 1938.36, 0.0)
(803.23, 1938.49, 0.0) (803.96, 1941.06, 4.21) (**803.98**, 1940.6, 4.55)
(**804.0**, 1940.32, 4.49) (**804.01**, 1940.68, 4.6) . . . (806.11, 1934.82, 10.64)
(806.11, 1934.86, 10.65) (806.11, 1934.91, 10.56) (806.32, 1933.24, 4.69)]
다음과 같이 하시겠습니까? [(1,2,3), (4,5,6)]'또는 다음과 같이 : [1,2,3,4,5,6] – dawg
무엇을 하시겠습니까? 목록을 조각으로 나누면 성취 할 수 있을까요? – Stuart
코드의'# 일부 물건 '부분에서하는 일은 정확히 무엇입니까? Numpy가 @TimPeters에서 제안한 바 이진 검색을 사용하여 슬라이스 끝점을 계산하는 것을 포함하여 전체를 벡터화 할 수있는 기회가 있습니다. 즉 while 루프를 사용하는 것이 최선의 선택이 아님을 의미합니다. – Jaime