如何使用字符串和数字对列表排序(外部文本文件)

2024-06-24 13:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我尝试使用来自this问题的代码,它起了作用,但我正在将一个文本文件导入到一个列表中,它似乎没有对它进行排序。你知道吗

这是我的密码:

import re
key_pat = re.compile(r"^(\D+)(\d+)$")
def key(item):
    m = key_pat.match(item)
    return m.group(1), int(m.group(2))

data=[line.strip() for line in open('DieGameScores.txt')]

data.sort( key=key )
print(data)

结果如下:

['tr35', 'nk32', 'ms49', 'mg41', 'jw40', 'jo13']

但我想让它输出这个:

['ms49', 'mg41', 'jw40', 'tr35', 'nk32', 'jo13']

有人知道怎么解决这个问题吗?你知道吗


Tags: key代码redatalinegroupthisitem
3条回答

你的剧本,在线

data.sort(key = key)

调用在名称键下定义的函数作为某种排序条件。然而,这并不是你的关键职能部门的职责。你知道吗

也就是说,稍微修改一下就可以了。首先介绍:

def my_criteria(a):
    return int(a[-2:])

然后像你那样给sort打电话:

data.sort(key=my_criteria, reverse=True)

这一次,您使用的键将焦点放在字符串末尾的int作为排序标准,使用reverse=True参数可以得到您似乎一直在尝试得到的结果。你知道吗

如果需要按int排序的列表,这是一种方法

例如:

l = ['tr35', 'nk32', 'ms49', 'mg41', 'jw40', 'jo13']
print(sorted(l, key=lambda x: int("".join(i for i in x if i.isdigit())), reverse=True))

输出:

['ms49', 'mg41', 'jw40', 'tr35', 'nk32', 'jo13']

如果要先按数字排序,然后按字符串部分排序-需要反转键函数中的返回值-

return int(m.group(2)), m.group(1) 

然后,由于需要按降序排列,因此需要指定相反的参数

data.sort(key=key, reverse=True)

相关问题 更多 >