2013-05-02 3 views
0

페이지 매김을 통해 목록을 반복하는 알고리즘이 필요합니다.페이지 매김을 사용하여리스트를 반복하는 알고리즘?

나는 초기 색인과 "페이지"의 크기에만 관심이 있습니다. 예를 들어

내 목록이 긴 100 개 항목의 경우, 페이지 길이는 10 :

내 문제는 이러한 경우 만족 우아한 해결책오고있다
1st page: starts at 0, length 10 
2nd page: starts at 11, length 10 
3rd page: starts at 21, length 10 
... 
Nth page: starts at 90, length 10 

:

1. list has 9 elements, page length is 10 

     1st page: starts at 0, length 9 

2. list has 84 elements, page length is 10 

     1st page: starts at 0, length 10 
     2nd page: starts at 11, length 10 
     3rd page: starts at 21, length 10 
     ... 
     Nth page: starts at 80, length 4 

I을 수많은 조건문과 모듈러스 연산으로이 작업을 수행 할 수 있지만, 누구든지이 문제에 대해보다 훌륭하고 우아한 접근 방식을 제공 할 수 있는지 궁금합니다.

감사합니다.

+1

항목이 0 색인 및 각각 10이되면 ... 난 당신이 11에서 시작하는 2 페이지를 원한다고 생각하지 않습니다) – Patashu

+0

은 페이지 [(page_n-1) * elements_per_page]에서 시작하고 [((pages_n-1) * elements_per_page) + elements_per_page-1] 페이지에서 멈춤 - 페이지 0에서 시작하려면 -1을 제거하십시오 – fotanus

답변

1

다른 언어에도 사용할 수있는 파이썬에서 먼 길을 가고있는 코드가 있습니다. 이 중간 Pythoneer에 의해 더 유지 보수 방식으로 수행하는 방법은 다음 :

>>> from pprint import pprint as pp 
>>> n, perpage = 84, 10 
>>> mylist = list(range(n)) 
>>> mylist[:10] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> mylist[-10:] # last ten items 
[74, 75, 76, 77, 78, 79, 80, 81, 82, 83] 
>>> sublists = [] 
>>> for i in range(n): 
    pagenum, offset = divmod(i, perpage) 
    if offset == 0: 
     # first in new page so create another sublist 
     sublists.append([]) 
    # add item to end of last sublist 
    sublists[pagenum].append(i) 


>>> pp(sublists) 
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39], 
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49], 
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59], 
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69], 
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79], 
[80, 81, 82, 83]] 
>>> # Alternatively 
>>> sublists2 = [mylist[i:i+perpage] for i in range(0, n, perpage)] 
>>> pp(sublists2) 
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39], 
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49], 
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59], 
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69], 
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79], 
[80, 81, 82, 83]] 
>>> 
관련 문제