Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按2个整数排序_Python_Python 3.x_Sorting_Numbers - Fatal编程技术网

Python 如何按2个整数排序

Python 如何按2个整数排序,python,python-3.x,sorting,numbers,Python,Python 3.x,Sorting,Numbers,我尝试了许多方法,试图获得正确的排序,但没有成功。 使用这段代码意味着将一个完全排序的列表输出到winlist.txt,但它只按第一个整数排序,因此不能正确排序 def sort(): winfile = list() with open ('winners.txt') as fin: for line in fin: winfile.append(line.strip('\n'))

我尝试了许多方法,试图获得正确的排序,但没有成功。 使用这段代码意味着将一个完全排序的列表输出到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的上方

尝试使用
参数:

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')

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

导入操作符
如果名称=“\uuuuu main\uuuuuuuu”:
将open(“to_be_sorted.txt”,“r”,encoding=“utf-8”)作为f:
数据=[line.split()用于f.readlines()中的行]
排序依据第一列=lambda行:int(operator.itemgetter(0)(行))
data.sort(key=sort\u by\u first\u column)
对于行输入数据:
打印(“.”连接(行))

从winners.txt读取后,您的winfile包含字符串列表

这就是sort()函数按字母顺序对字符串排序的原因

一种方法是,您可以将字符串拆分为两项tuple/list(最快的是split()到list),将第一项转换为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')

因为python
open
函数将返回一些
String
对象,所以像这样的数字
“11”
但不是
11
,您可以通过
int()
转换它,但是有一种简单的方法,使用
pandas
moudle。 我想你的文字是这样的:

11 Tom
2 Tom
20 Ben
20 Tom
21 Ben
1.使用第三方(推荐) 首先。您应该安装pandas,
pip安装pandas

将熊猫作为pd导入
#sep是要使用的分隔符,默认值为逗号
df=pd.read_csv('winners.txt',header=None,names=['num','name'],sep='',dtype={'num':int,'name':str})
df=df.sort_索引(by='num')
df.to_csv('SortWin.txt',index=False,sep='',header=None,mode='w+'))
最后,结果是这样的

2 Tom
11 Tom
20 Ben
20 Tom
21 Ben

2.原始python函数解决方案 不要使用第三方,我们也可以这样做

def sort():
winfile=list()
以open('winners.txt')作为fin:
对于fin中的行:
winfile.append(line.strip('\n'))
排序(key=lambda x:int(x.split(“”)[0]))
以open('SortWin.txt','w+')作为fout:
对于winfile中的winfile:
fout.write(winfile+'\n')

它按第一个字符排序,字符串中没有整数-您需要转换它谢谢,这非常有用,因为它很紧凑,我理解它。