Python-在包含字符串和数字的列表中对数字值进行排序
我创建了一个列表,其中包含python中一个分数文件中的所有信息 scores.txt文件:Python-在包含字符串和数字的列表中对数字值进行排序,python,list,sorting,Python,List,Sorting,我创建了一个列表,其中包含python中一个分数文件中的所有信息 scores.txt文件: Dan Danson,9,6,1 John Johnson,5,7,10 Mike Mikeson,10,7,6 我这样做是为了将.txt文件中的信息保存到二维列表中: f = open(filename, 'r') lines = f.readlines() f.close() scores = [] for line in lines: #Loads lines into a 2d list
Dan Danson,9,6,1
John Johnson,5,7,10
Mike Mikeson,10,7,6
我这样做是为了将.txt文件中的信息保存到二维列表中:
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
将与用作键函数:
>>> 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']]
:分隔数字值和排序排序(行[1:],…)
:以列表的形式命名,或者您可以使用行[: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
你也可以这样处理这个问题。我首先将所有等级转换为整数类型,以便保持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)
您需要将数字与字符串隔离。。。也许做一个关联数组,把你的名字作为键。在python中查找字典,看看是否有帮助..谢谢,但是我如何对列表进行排序,以使“高分”最高的名称位于顶部(列表的第一个元素)。如果两个人的高分是10分,我想比较他们的第二高分,看看谁的分数更高,如果是相同的,比较他们的第三高分,得到我放在我文章底部的最终结果。干杯。@Tizer1000,您需要另一个
排序
和lambda行:sum(map(int,row[1:])
来获得总数。您能编辑上面的代码来显示吗?谢谢大家!@Tizer1000,我更新了答案。对不起,我错过了开头的最后一部分。谢谢你的反馈。