0

这是问题所在,我正在使用该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

退货['s1q1', 's1q2', 's10q1', 's10q2', 's10q10']

我的问题是对第二个数字进行排序:

sortqns(['s12q1', 's1q2', 's1q1'])

Returns ['s1q2', 's1q1', 's12q1']

代替:

Returning ['s1q1', 's1q2', 's12q1']

在第一个示例中,如果前两个项目也被交换,我想要的回报将是关闭的。

4

1 回答 1

5

列表中的排序算法是稳定的。稳定的排序算法保持具有相同键的记录的相对顺序。因此,在您的代码中,当两个元素具有相同的长度时,它们将出现在结果中并保持它们的相对顺序。

我认为以下解决方案很有帮助。

def sortqns(qnlist):
    return sorted(qnlist, key = lambda x: (len(x), x))
于 2012-05-19T05:07:10.583 回答