【Python】【排序】字符串列表排序/题目排序/首字母排序

 

一、首字母排序

说明:有一个字符串列表  然后根据字符串的第一个字母 对这个字符串列表进行排序

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@Time    :
@Author  :
@File    :
@Version :
@Function:
"""
from typing import List


class SortStr:
    @staticmethod
    def __find_pha(str_olds: List[str]):
        """
        过滤字符串中的非字母字符
        :param str_olds: 原始字符串 如:[--?—He teaches physics i(What is your father)]
        :return: 过滤后的新字符串 如:[HeteachesphysicsiWhatisyourfather]
        """
        str_news = []
        for str_old in str_olds:
            str_new = ''
            for char_old in str_old:
                if char_old.isalpha():
                    str_new += char_old
            str_news.append(str_new)
        return str_news

    @staticmethod
    def __sort_str(str_olds: List[str], reverse: bool = False, target_index: int = 0):
        """
        对字符串列表排序
        :param str_olds: 原始字符串列表
        :param reverse: False-正序,True-倒序
        :param target_index: 需要排序的字符在字符串中的序号(从0开始)
        :return:
        """
        # 全部转为大写
        str_olds_tem = []
        for i in str_olds:
            str_olds_tem.append(i.upper())
        # 排序(针对list中的字符串首字母排序)
        sort_index = []
        for i in str_olds_tem:
            sort_index.append({
                'key': str_olds_tem.index(i),
                'value': i[target_index]
            })
        reverse = reverse if reverse else False
        sort_index = sorted(sort_index, key=lambda e: e.__getitem__('value'), reverse=reverse)
        # 排序后的序号
        ture_index = []
        for i in sort_index:
            ture_index.append(i.get('key'))
        return ture_index

    @staticmethod
    def start(str_old, *args, **kwargs):
        """
        开始调用
        :param str_old:
        :param args:
        :param kwargs: reverse=True 倒序 默认正序
        :return:
        """
        str1 = SortStr.__find_pha(str_old)
        ture_index = SortStr.__sort_str(str1, *args, **kwargs)
        ture_str = []
        for i in ture_index:
            ture_str.append(str_old[i])
        return ture_str


if __name__ == '__main__':
    str_o = [
        "--?—de teaches physics i(What is your father)",
        "--?—I’m suffering fr(What's the matter with)",
        "--?—Well, they got there l(How long have y)",
        "--?—bes, what size is t(Anything I can do fo)",
        "--?—Aou too!  (Merry Christmas!)",
        "--?—AAu too!  (Merry Christmas!)",
    ]
    print('*' * 20 + '排序前' + '*' * 20)
    print(*str_o, sep='\n')
    print('\n' + '*' * 20 + '排序后(正序)' + '*' * 20)
    print(*SortStr.start(str_o), sep='\n')
    print('\n' + '*' * 20 + '排序后(倒序)' + '*' * 20)
    print(*SortStr.start(str_o, reverse=True), sep='\n')
    print('\n' + '*' * 20 + '排序后(对第二个字母字符排序)' + '*' * 20)
    print(*SortStr.start(str_o, target_index=1), sep='\n')

输出

 

 

 

 

 

 

二、所有字母排序

说明:有一个字符串列表  然后根据字符串的 每一个字母 依次递归对这个字符串列表进行排序

 

posted @ 2021-11-12 11:02  淡怀  阅读(1243)  评论(0编辑  收藏  举报