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条)

报告相同问题?

悬赏问题

  • ¥50 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码