我有一个相当简单的列表(一个数字后跟一个句子),这里按正确的顺序:
-347 a negative number
-100 another negative number
-25 and again, a negative number
17 some text
25 foo bar
100 two same texts
100 two same texts (almost)
350 a positive number
每次添加新项目时,我都需要对该列表进行排序。
我搜索了 S.O.并找到了答案:
python 中的排序 - 如何对包含字母数字值的列表进行排序? https://stackoverflow.com/questions/19366517/sorting-in-python-how-to-sort-a-list-containing-alphanumeric-values
我使用的代码很奇怪,它是这样的:
import re
def convert(str):
return int("".join(re.findall("\d*", str)))
list1.sort(key=convert)
为了更好地解释我的问题,我重新整理了列表并运行了代码。
结果是:
17 some text
-25 and again, a negative number
25 foo bar
100 two same texts (almost)
100 two same texts
-100 another negative number
-347 a negative number
350 a positive number
什么地方出了错 ?对负数进行自然排序的代码的精度是多少?
Sort 可以接受元组,因此首先按数字排序,然后按后面的文本排序
list_text = """-347 a negative number
-100 another negative number
-25 and again, a negative number
17 some text
25 foo bar
100 two same texts
100 two same texts (almost)
350 a positive number"""
list1 = list_text.split("\n")
list1.sort(key=lambda x: (int(x.split()[0]), x.split(" ",1)))
print("\n".join(list1))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)