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']

私の問題は、2桁目をソートすることです:

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

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

それ以外の:

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

最初の例では、最初の 2 つのアイテムも交換された場合、希望するリターンはオフになります。

4

1 に答える 1

5

リストのソートアルゴリズムは安定しています。安定した並べ替えアルゴリズムは、等しいキーを持つレコードの相対的な順序を維持します。したがって、コードでは、2 つの要素が同じ長さの場合、相対的な順序が維持された結果に表示されます。

次の解決策が役立つと思います。

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