因此,我尝试使用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']
有人知道如何解决此问题吗?
答案 0 :(得分:3)
如果您需要按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']
答案 1 :(得分:1)
如果要先按数字排序,然后按字符串部分排序-您需要反转键函数中的返回值-
return int(m.group(2)), m.group(1)
然后,由于您希望按降序排列-您需要指定相反的参数
data.sort(key=key, reverse=True)
答案 2 :(得分:0)
您的脚本,在线
data.sort(key = key)
将您在名称键下定义的函数作为某种排序标准调用。但是,这不是您的关键职能的角色。
话虽如此,稍加修改即可解决问题。首先介绍:
def my_criteria(a):
return int(a[-2:])
然后调用几乎像您一样进行排序:
data.sort(key=my_criteria, reverse=True)
这一次,您所使用的键将重点放在字符串末尾的int作为排序标准,并使用reverse = True参数获得了您似乎一直在尝试获得的东西。
答案 3 :(得分:0)
您可以做类似
的操作注意-假设您的最后两个字符是所有元素的数字
l = ['tr35', 'nk32', 'jw40', 'jo13', 'ms49', 'mg41']
sl = sorted(l, key=lambda x: x[2:], reverse=True)
print(sl)
输出
['ms49', 'mg41', 'jw40', 'tr35', 'nk32', 'jo13']
答案 4 :(得分:0)
只需从键输出中删除第一组,因此您的代码将如下所示:
import re
key_pat = re.compile(r"^(\D+)(\d+)$")
def key(item):
m = key_pat.match(item)
return int(m.group(2))
data = [line.strip() for line in open('DieGameScores.txt')]
data.sort(key=key, reverse=True)
print(data)
输出:
['ms49', 'mg41', 'jw40', 'tr35', 'nk32', 'jo13']