在对列表进行排序时,我认为 Python 认为'*'
是“之前”(是否有一个词表示 Python 用于排序的顺序是什么?)字母和数字,我希望它是另一种方式。我想在他们'A*0'
之后'A0', 'AB', 'A1', ...
而不是在他们之前。如何实现这一目标?
这是一个最小的可重现示例:
list = ["A*0", "A0", "A1", "A*1", "AB", "*BC", "C"]
sorted(list)
Out[7]: ['*BC', 'A*0', 'A*1', 'A0', 'A1', 'AB', 'C']
我想要这种行为:
list = ["A*0", "A0", "A1", "A*1", "AB", "*BC", "C"]
sorted(list)
Out[7]: ['A0', 'A1', 'AB', 'A*0', 'A*1', "C", "*BC"]
传递一个排序键,替换*
为~
lst = ["A*0", "A0", "A1", "A*1", "AB"]
# replace * by ~ when sorting (since ~ has the highest ascii value)
sorted(lst, key=lambda x: x.replace('*','~'))
# ['A0', 'A1', 'AB', 'A*0', 'A*1']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句