我创建了一个列表,其中包含python中得分文件的所有信息。
得分.txt文件:
Dan Danson,9,6,1
John Johnson,5,7,10
Mike Mikeson,10,7,6
我这样做是为了将.txt文件中的信息转换为2d列表:
f = open(filename, 'r')
lines = f.readlines()
f.close()
scores = []
for line in lines: #Loads lines into a 2d list
currentline = line.strip('\n').split(",")
scores.append(currentline)
现在我有这个清单:
[['Dan Danson', '1', '6', '9'], ['John Johnson', '5', '7', '10'], ['Mike Mikeson', '10', '7', '6']]
从这个列表中我想对列表中的数字进行排序,以便从最高到最低排序,所以我得到一个如下所示的列表:
[['Dan Danson', '9', '6', '1'], ['John Johnson', '10', '7', '5'], ['Mike Mikeson', '10', '7', '6']]
最后,我希望能够打印从最高到最低排序的列表。
Mike Mikeson,10,7,6
John Johnson,10,7,5
Dan Danson,9,6,1
答案 0 :(得分:2)
>>> rows = [
... ['Dan Danson', '1', '6', '9'],
... ['John Johnson', '5', '7', '10'],
... ['Mike Mikeson', '10', '7', '6'],
... ]
>>>
>>> rows = [row[:1] + sorted(row[1:], key=int, reverse=True) for row in rows]
>>> sorted(rows, key=lambda row: sum(map(int, row[1:])), reverse=True)
[['Mike Mikeson', '10', '7', '6'],
['John Johnson', '10', '7', '5'],
['Dan Danson', '9', '6', '1']]
sorted(row[1:], ..)
:单独的数字值和排序。row[:1]
:将名称命名为列表,或者您可以使用[row[0]]
。应该是一个列表,用于连接数字字符串列表。答案 1 :(得分:0)
>>> l = [['Dan Danson', '9', '6', '1'], ['John Johnson', '10', '7', '5'], ['Mike Mikeson', '10', '7', '6']]
>>> for e in l:
... print(e[0], *sorted(list(map(int, e[1:]))))
...
...
Dan Danson 1 6 9
John Johnson 5 7 10
Mike Mikeson 6 7 10
答案 2 :(得分:0)
您也可以通过这种方式解决问题。我首先将所有等级转换为整数类型,以便我可以保持我的lambda函数清洁。我本可以在lambda函数中完成转换,但它并不像我这么想。
您可以看到将每个问题拆分为不同的模块,从而提供可重用性。
test = [['Dan Danson', '1', '6', '9'], ["Karthikeyan", 10, 10, 10], ['John Johnson', '5', '7', '10'], ['Mike Mikeson', '10', '7', '6']]
def covert_to_integer(test):
"""
Coverting all grades into integer type
"""
for outer_index, item in enumerate(test):
for inner_index, element in enumerate(item[1:], 1):
test[outer_index][inner_index] = int(element)
return sorting_by_sum(test)
def sorting_by_sum(test):
"""
Sorting the records by sum of the grades.
"""
return sorted(test, key=lambda record: record[1]\
+ record[2] \
+ record[3], reverse=True)
if __name__ == "__main__":
print covert_to_integer(test)
你甚至可以在lambda函数中使用list的sum方法。像这样:
return sorted(test, key=lambda record: sum(record[1:])\
,reverse=True)