Python 如何按2个整数排序
我尝试了许多方法,试图获得正确的排序,但没有成功。 使用这段代码意味着将一个完全排序的列表输出到winlist.txt,但它只按第一个整数排序,因此不能正确排序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'))
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')
因为pythonopen
函数将返回一些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')
它按第一个字符排序,字符串中没有整数-您需要转换它谢谢,这非常有用,因为它很紧凑,我理解它。