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

时间:2016-05-17 10:10:41

标签: python list sorting leaderboard

我正在尝试制作排行榜。 这是我有一个清单:

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

我希望能够将此列表从最高编号到最小编号,甚至从最小编号到最高编号,给出类似下面的内容:

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

我尝试使用像re.findall('\d+', list[loop])[0]这样的东西,但我只是设法从列表中获得最好的玩家。不想为尽可能多的玩家重复代码,有没有人有想法?

2 个答案:

答案 0 :(得分:3)

您确实必须使用re模块,以及sort()方法的key参数。

reg = re.compile('\w*?(\d+)\\n')
lst.sort(key=lambda s: int(reg.match(s).group(1)))

使用findall()也可以正常工作:

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

请注意我compile()正则表达式,因此它一劳永逸地计算,而不是列表中的每个元素。

答案 1 :(得分:1)

我有另一种基于面向对象编程的解决方案以及__lt__ 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) 特殊方法的覆盖。

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

打印到标准输出:

sort

此方法允许您不重写str函数并使用内置函数(可能已优化)。更重要的是,因为你的字符串可能被认为是@RequestMapping(value = "/some/link", produces = "application/json") @ResponseBody public AnyDto suggestMapping(@Valid @RequestBody(required = false) SomeDto dto) throws Exception { ///some code return null; } 类&#34;的特化,继承机制非常适合,因为你保留了它的所有属性,但重写了它的比较机制。