2014-07-20 4 views
2

그래서 목록 내에 여러 개의 목록이있는 파일로 작업하고 있습니다. 나는 총 참가자 수를 상위 5 개 주와 5 개 주로 정렬하려고합니다. 이것은 내가 찾고 있지만 참가자의 총 수에 가장 큰으로 분류되지 않는 거의 무엇을하는 방식으로 파일을 인쇄중첩 목록에서 상위 5 개 및 하위 5 개 목록 만 가져 오는 방법은 무엇입니까?

State Total #,% passed,%female 
Wyoming 0,0,0 
New Hampshire 101,76,12 
Utah 103,54,4 
Mass 1067,67,18 
Montana 11,55,0 
Iowa 118,80,9 
Alabama 126,79,17 
Georgia 1261,51,18 
Florida 1521,44,20 
Illinois 1559,69,13 
New Jersey 1582,74,15 
Maine 161,67,16 

: 이런 식으로 뭔가를 인쇄

import csv 
from operator import itemgetter #not really using this right now 
crimefile = open('APExam.txt', 'r') 
reader = csv.reader(crimefile) 
allRows = [row for row in reader] 
L = sorted(allRows,key=lambda x: x[1]) 
for item in L: 
    print item[0],','.join(map(str,item[1:])) 

최저; 첫 번째 요소를보고 정렬됩니다. 다음과 같이 변경하려면 어떻게해야합니까?

New Jersey 1582,74,15 
Illinois 1559,69,13 
Florida 1521,44,20 
Georgia 1261,51,18 
Etc... 

처음으로 질문을 올리면 도움이 될 것입니다. :) 또한, 나는 "5, 4, 7 6 ... 6"과 같은 .sort() 또는 find() 함수 또는 "in"연산자를 사용하지 않으려 고합니다.

편집 *는 : L 변경하여

L = sorted(allRows,key=lambda x: int(x[1]),reverse=True) 

나는 내림차순으로가는 목록을 어디 지점에 왔은 :

State Total #,% passed,%female 
California 4964,76,22 
Texas 3979,62,23 
New York 1858,69,20 
Virginia 1655,60,19 
Maryland 1629,66,20 
New Jersey 1582,74,15 
Illinois 1559,69,13 
Florida 1521,44,20 

지금 꽤 방법을 알아낼 수 없습니다 이 합계를 기준으로 상위 5 위와 아래 5를 가져 가십시오.

답변

1

>>> L = range(15) 
>>> L 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 

>>> L[:5] 
[0, 1, 2, 3, 4] 

>>> L[-5:] 
[10, 11, 12, 13, 14] 
1

은 기본적으로 당신이 올바른 궤도에 : 소위 상위 5와 하단 5 요소 당신이 list slicing 사용할 수 있습니다 얻을, 원하는대로 정렬 처리.

>>> xs = sorted(range(10), reverse=True) # A sorted list in descending order 
>>> xs 
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
>>> xs[:5] # Top 5 
[9, 8, 7, 6, 5] 
>>> xs[-5:] # Bottom 5 
[4, 3, 2, 1, 0] 
>>> 

당신은 당신의 문제에 슬라이스의 같은 종류를 사용할 수 있어야합니다 :

은 당신이 지금 할 수있는 것은 결과 목록을 슬라이스입니다.

An Information Introduction to Python (슬라이스 을 강조)이 유용한 가이드

를 참조하십시오