tij*_*jko 0 python list sorted
这是问题,我正在使用该sorted函数来排列字母数字字符串列表.所述字符串必须以字母分隔.
例如: sortqns(['s1q1', 's10q1', 's1q2', 's10q10', 's10q2'])
def cmpqn(a, b):
if len(a) > len(b):
return 1
if len(a) < len(b):
return -1
if len(a) == len(b):
return 0
def sortqns(qnlist):
new = sorted(qnlist, cmp=cmpqn)
return new
Run Code Online (Sandbox Code Playgroud)
返回 ['s1q1', 's1q2', 's10q1', 's10q2', 's10q10']
我的问题是排序第二个数字:
sortqns(['s12q1', 's1q2', 's1q1'])
Returns ['s1q2', 's1q1', 's12q1']
Run Code Online (Sandbox Code Playgroud)
代替:
Returning ['s1q1', 's1q2', 's12q1']
Run Code Online (Sandbox Code Playgroud)
在第一个例子中,如果前两个项目也被交换,我想要的回报将被关闭.
小智 5
列表中的排序算法是稳定的.稳定的排序算法使用相同的密钥保持记录的相对顺序.因此,在你的代码中,当两个元素具有相同的长度时,它们将在结果中出现维持其相对顺序.
我认为以下解决方案很有帮助.
def sortqns(qnlist):
return sorted(qnlist, key = lambda x: (len(x), x))
Run Code Online (Sandbox Code Playgroud)