如何按2个整数排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何按2个整数排序相关的知识,希望对你有一定的参考价值。
我已经尝试了许多选择来尝试使排序正确而没有成功。使用这段代码,它的意思是将一个完全排序的列表输出到winlist.txt上,但仅按第一个整数排序,因此无法正确排序。
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort()
with open('SortWin.txt', 'w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')
当前此片段代码输出:
11 Tom
2 Tom
20 Ben
20 Tom
21 Ben
但是我希望排序使用2个整数而不是仅第一个进行排序。使2高于11
答案
尝试使用key
参数:
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort(key=lambda x: int(x.split()[0]))
with open('SortWin.txt', 'w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')
另一答案
为了按第一列对行进行排序,您必须先对它们进行拆分,然后通过提供适当的key
至sort()
进行相应的排序:
import operator
if __name__ == "__main__":
with open("to_be_sorted.txt", "r", encoding="utf-8") as f:
data = [line.split() for line in f.readlines()]
sort_by_first_column = lambda line: int(operator.itemgetter(0)(line))
data.sort(key=sort_by_first_column)
for line in data:
print(" ".join(line))
另一答案
从winners.txt中读取后,您的winfile包含字符串列表。
这就是为什么sort()函数按字母顺序对字符串进行排序的原因。
一种方法,您可以将字符串拆分为两个项目元组/列表(最快的是将split()拆分为列表),将第一项转换为int。
现在您对该列表进行排序。输出将是单独的字符串列表。
def get_key(pair):
pair = pair.split()
return int(pair[0])
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort(key = get_key)
with open('SortWin.txt', 'w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')
以上是关于如何按2个整数排序的主要内容,如果未能解决你的问题,请参考以下文章