假设我有这个名单和分数列表:
scores_list = ["Username1,9,5,6", "Username2,7,6,8", "Username3,10,10,7"]
列表中的每个值的格式为-Name-Score1-Score2-Score3 -
我如何对此列表进行排序,以便从过去3个结果中得分最高的用户首先一直到最后得分最低。
所以,在这种情况下,我希望它会像这样订购
("Username3,10,10,7", "Username1,9,6,5", "Username2,8,7,6")
10是最高,然后是9,然后是8。
因此,基本上,我需要将三个分数按从最高到最低的顺序排列,然后列表中每个值的最高分也要从最高到最低排序。
也许我需要为列表中的每个值赋予它自己的索引,所以它是一个2d列表?
感谢您的帮助。
答案 0 :(得分:1)
您首先需要拆分每个条目并以数字方式对分数进行排序。然后可以重新生成结果列表以创建更新的scores_list
,如下所示:
scores_list = ["Username1,9,5,6", "Username2,7,6,8", "Username3,10,10,7"]
output = []
for entry in scores_list:
values = entry.split(',')
output.append([values[0], sorted([int(x) for x in values[1:]], reverse=True)])
scores_list = ['{},{}'.format(entry[0], ','.join(str(x) for x in entry[1])) for entry in sorted(output, key=lambda x: x[1], reverse=True)]
print scores_list
这将显示以下内容:
['Username3,10,10,7', 'Username1,9,6,5', 'Username2,8,7,6']
答案 1 :(得分:0)
使用排序的sorted or .sort method
和key属性
<强>代码:强>
scores_list = ["Username1,920,5,6", "Username2,10,11,8", "Username3,10,10,7"]
def transform(lst):
return map(int, lst.split(",")[1:])
print sorted(scores_list, key= transform ,reverse=True)
<强>输出:强>
['Username3,10,10,7', 'Username1,9,5,6', 'Username2,7,6,8']
备注:强>
tranform
函数
,
处滑动并将它们转换为整数列表并将其赋予键答案 2 :(得分:0)
首先,使用一个函数将每个元素(如Username1,9,5,6
)转换为列表,如["Username1",9,5,6]
。同时,对三个分数进行排序,每个元素的最终形式如["Username1",9,6,5]
,然后对传输的数据进行排序。最后,连接已排序列表的列表元素
scores_list = ["Username1,9,5,6", "Username2,7,6,8", "Username3,10,10,7"]
def transfer(x):
items = x.split(",")
result = [items[0]] + sorted(map(int,items[1:]), reverse = True)
return result
transfered = map(transfer,scores_list)
transfered.sort(key=lambda x:x[1], reverse = True)
result = [",".join(map(str,x)) for x in transfered]
print result
>>>output:
['Username3,10,10,7', 'Username1,9,6,5', 'Username2,8,7,6']
答案 3 :(得分:0)
如果你是从文件中读取这个文件,那么使用csv模块解析数据会更好:
from csv import reader
with open("your_file") as f:
srt = sorted(([row[0]] + sorted(map(int, row[1:]), reverse=1) for row in reader(f)), reverse=1)
for row in srt:
print(row)
输出:
['Username3', 10, 10, 7]
['Username2', 8, 7, 6]
['Username1', 9, 6, 5]
如果您计划使用数据,那么将其分开将使生活更轻松。
完成数据后,您可以使用csv.writer
:
with open("your_file","w") as out:
wr = csv.writer(out)
wr.writerows(srt)
哪个会给你:
Username3,10,10,7
Username2,8,7,6
Username1,9,6,5