我有一个字符串列表,我想进行自然排序:
c = ['0', '1', '10', '11', '2', '2Y', '3', '3Y', '4', '4Y', '5', '5Y', '6', '7', '8', '9', '9Y']
除了自然排序外,我希望将所有非纯数字字符串的条目移动到末尾。 我期望的输出结果是这样的:
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '2Y', '3Y', '4Y', '5Y', '9Y']
需要注意的是,所有内容都必须进行自然排序,甚至是包含字母数字混合的字符串。
我知道我可以使用natsort
包来实现我的需求,但这不足以满足我的要求。我需要进行两次排序调用——一次进行自然排序,另一次将非纯数字字符串移到末尾。
import natsort as ns
r = sorted(ns.natsorted(c), key=lambda x: not x.isdigit())
print(r)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '2Y', '3Y', '4Y', '5Y', '9Y']
我想知道是否可以巧妙地使用natsort
并将其减少到单个排序调用。
key=str.isdigit, reverse=True
。 - PM 2Ring