所以我正在使用列表中包含大量列表的文件。我正试图将前5个州和最低5个州的总人数安排在一起。
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:]))
打印出类似这样的内容:
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
这会以几乎我正在寻找的方式打印文件,但参与者总数不按最大值排列到最低值;它是通过查看第一个元素来排序的。如何将其更改为更像:
New Jersey 1582,74,15
Illinois 1559,69,13
Florida 1521,44,20
Georgia 1261,51,18
Etc...
第一次在这里提问,任何帮助表示赞赏! :)另外,我试图不使用.sort()或find()函数或“in”运算符 - 例如“if in in in in [5,4,7 6] ......”
编辑*:通过更改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名......
答案 0 :(得分:2)
答案 1 :(得分:1)
似乎你根据自己的喜好处理了排序,所以要获得前5个和后5个元素,你可以使用list slicing:
>>> 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]
答案 2 :(得分:1)
基本上你走在正确的轨道上。
您现在可以做的是切片结果列表:
>>> 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(片段突出显示)