如何按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')
另一答案

为了按第一列对行进行排序,您必须先对它们进行拆分,然后通过提供适当的keysort()进行相应的排序:

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个整数排序的主要内容,如果未能解决你的问题,请参考以下文章

如何按整数属性对类列表进行排序? [复制]

CCF 201503-2 数字排序

CCF201503-2数字排序

1117.整数奇偶排序

[Python]CCF——数字排序(201503-2)

如何按日期时间和整数对光标进行排序