My梦 2021-04-25 18:45 采纳率: 50%
浏览 112
已采纳

请问这样的特殊字符串排序如何排

最初的字符串列表

['A', 'A+', 'A-', 'AA', 'AA+', 'AA-', 'AAA', 'B', 'B-', 'BB', 'BB+', 'BBB', 'BBB+', 'BBB-', 'C', 'CC', 'CCC']

最终要求的结果

['A', 'A+', 'A-', 'AA', 'AA+', 'AA-', 'AAA', 'B', 'B-', 'BB', 'BB+', 'BBB', 'BBB+', 'BBB-', 'C', 'CC', 'CCC']

排序规则

1. A>B>C

2. AA+ > AA > AA- (这里的+-是我的问题根源所在)

 

目前有一个这样的逻辑,自己有点糊涂了,得到的结果和最终要求不一样

from functools import cmp_to_key


def cmp(s1, s2):
    list1 = list(s1)
    list2 = list(s2)
    # sort_dict = {"+": -1, "-": -2}
    sort_dict = {"-": 1}
    while list1 and list2:
        value1 = list1.pop(0)
        if sort_dict.get(value1):
            value1 = sort_dict.get(value1)
        value2 = list2.pop(0)
        if sort_dict.get(value2):
            value2 = sort_dict.get(value2)
        if isinstance(value1, str):
            value1 = ord(value1)
        if isinstance(value2, str):
            value2 = ord(value2)
        if value1 == value2:
            continue
        elif value1 > value2:
            return -1
        else:
            return 1
    if list1:
        return -1
    else:
        return 1


str_list = ['A', 'A+', 'A-', 'AA', 'AA+', 'AA-', 'AAA', 'B', 'B-', 'BB', 'BB+', 'BBB', 'BBB+', 'BBB-', 'C', 'CC', 'CCC']

str_list.sort(key=cmp_to_key(cmp), reverse=True)

有哪位朋友帮忙指点一二,如果您有更好的方法,麻烦您帮忙解答一下,非常感谢~~~~

 

  • 写回答

5条回答 默认 最新

  • 关注
    la = ['A', 'A+', 'A-', 'AA', 'AA+', 'AA-', 'AAA', 'B', 'B-', 'BB', 'BB+', 'BBB', 'BBB+', 'BBB-', 'C', 'CC', 'CCC']
    def df(v):
        if v[-1]=="+":
            s = v[:-1]
            n = -1
        elif v[-1]=="-":
            s = v[:-1]
            n = 1
        else:
            s = v
            n = 0
        return (s,n)
    la.sort(key=df)
    print(la)

    结果

    ['A+', 'A', 'A-', 'AA+', 'AA', 'AA-', 'AAA', 'B', 'B-', 'BB+', 'BB', 'BBB+', 'BBB', 'BBB-', 'C', 'CC', 'CCC']  

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?