Python 对列表中带整数的字符串进行排序

Python 对列表中带整数的字符串进行排序,python,list,sorting,leaderboard,Python,List,Sorting,Leaderboard,我正在尝试制作排行榜。 以下是我的清单: list=['rami4\n', 'kev13\n', 'demian6\n'] 我希望能够将此列表从最高数字到最小,甚至从最小到最高进行排序,给出如下内容: list=['kev13\n', 'demian6\n', 'rami4\n'] 我试着使用re.findall('\d+',list[loop])[0]之类的东西,但我只能从列表中找到最好的玩家。不想为尽可能多的玩家重复代码,有人有想法吗?您确实需要使用该模块,还需要使用该方法的键参数 使用

我正在尝试制作排行榜。 以下是我的清单:

list=['rami4\n', 'kev13\n', 'demian6\n']
我希望能够将此列表从最高数字到最小,甚至从最小到最高进行排序,给出如下内容:

list=['kev13\n', 'demian6\n', 'rami4\n']

我试着使用
re.findall('\d+',list[loop])[0]
之类的东西,但我只能从列表中找到最好的玩家。不想为尽可能多的玩家重复代码,有人有想法吗?

您确实需要使用该模块,还需要使用该方法的
参数

使用
findall()
它也可以正常工作,就像您所做的那样:

reg = re.compile('\d+')
lst.sort(key=lambda s: int(reg.findall(s)[0]))

请注意,我使用正则表达式,因此它是一次性计算的,而不是针对列表中的每个元素。

您确实必须使用该模块,但也必须使用该方法的
参数

使用
findall()
它也可以正常工作,就像您所做的那样:

reg = re.compile('\d+')
lst.sort(key=lambda s: int(reg.findall(s)[0]))

请注意,我使用了正则表达式,因此它是一次性计算的,而不是针对列表中的每个元素。

我还有一个基于面向对象编程和重写
\uu lt\uuu
str的特殊方法的解决方案

import re

class SpecialString(str):
    def __lt__(self, other):
        pattern=re.compile(r"\d+")
        return int(pattern.search(str(self)).group(0)) <  int(pattern.search(str(other)).group(0))

if __name__ == "__main__":
    listing = ['rami4\n', 'kev13\n', 'demian6\n']
    spe_list = [SpecialString(x) for x in listing]
    spe_list.sort()
    print(spe_list)

此方法允许您不重写
sort
函数,而使用内置函数(可能已优化)。更详细地说,因为您的字符串可能被认为是“str类的专门化”,继承机制非常合适,因为您保留了它的所有属性,但重新编写了它的比较机制。

我还有一个基于面向对象编程和重写
\ult\uuuu
str特殊方法的解决方案

import re

class SpecialString(str):
    def __lt__(self, other):
        pattern=re.compile(r"\d+")
        return int(pattern.search(str(self)).group(0)) <  int(pattern.search(str(other)).group(0))

if __name__ == "__main__":
    listing = ['rami4\n', 'kev13\n', 'demian6\n']
    spe_list = [SpecialString(x) for x in listing]
    spe_list.sort()
    print(spe_list)

此方法允许您不重写
sort
函数,而使用内置函数(可能已优化)。此外,由于您的字符串可能被认为是“str类的专门化”,继承机制非常合适,因为您保留了它的所有属性,但重新编写了它的比较机制。

感谢Delgan,这很有效。不过,您能再解释一下您使用的compile()吗?@ArwanCredoz一些信息。简言之,正则表达式是一个字符串,它首先转换为一系列指令,然后应用于字符串以进行匹配。编译保存了第一步,因此如果必须将同一个正则表达式与多个字符串匹配,则可以提高速度。实际上,这并不重要,因为Python在内部缓存计算的正则表达式。但我认为明确地这样做是最好的做法。谢谢Delgan,这很有效。不过,您能再解释一下您使用的compile()吗?@ArwanCredoz一些信息。简言之,正则表达式是一个字符串,它首先转换为一系列指令,然后应用于字符串以进行匹配。编译保存了第一步,因此如果必须将同一个正则表达式与多个字符串匹配,则可以提高速度。实际上,这并不重要,因为Python在内部缓存计算的正则表达式。但我认为明确地这样做是最好的做法。