Python学习—— sorted 有关字符串的排序,排序规则:小写<大写<奇数<偶数

题目要求

  • 现有字符串 s = ‘asdf234GDSdsf23’,我想对这个字符串进行重新排序;
  • 排序规则是:小写<大写<奇数<偶数

首先涉及到的内容是 sorted 函数的使用

我的 第一篇排序文章 中有谈到该函数的使用。如有需要可以借鉴参考,需要了解更多建议到官方文档进行深入了解学习。

首先整理思路

  1. 字符串需要按字母大小写、奇数、偶数这四个评判要求进行分类;
  2. 排序的方法 sorted 的 key 参数接收的是一个函数,并根据函数的返回值进行排序;
  3. bool值可以进行排序!

思路整理到这里,我就想到了如果将字符串拆开分解成单个字符导入函数,输出一个元组/列表,然后进行排序,输出的格式如下:(bool , bool, ‘字符’)/[bool, bool, ’字符‘]

1. 第一个bool值,如果是数字就是True,如果是字母就输出False;

2. 第二个bool值,如果是偶数和大写字母,就输出True,如果是奇数和小写字母,就输出False。

函数思路已经捋清楚了,下面开始构造这个函数:

def str_sort2(str1):
    for temp in str1:
        if temp.isdigit():
            if int(temp) % 2 == 0:
                return (True, True, temp)
            else:
                return (True, False, temp)
        else:
            if temp.isupper():
                return (False, True, temp)
            else:
                return (False, False, temp)

仔细观察后,这个函数最后得到的结果应该能如我想象的那样将字符串的大小写排序好输出了!下面来看结果:

print(sorted(s, key=str_sort2))
# 然而得到的结果是一个列表:
#['a', 'd', 'd', 'f', 'f', 's', 's', 'D', 'G', 'S', '3', '3', '2', '2', '4']
# 这个结果确实已经按照我们设计好的那样按照:小写、大写、奇数、偶数的顺序进行排列好了
 - 最后 这里用一个join方法就可以得到一个排序后的字符串了
print(''.join(sorted(s, key=str_sort2)))
# 输出结果为:addffssDGS33224

嗯 到此就满足了!满足了? 那可不满足!
Python学习—— sorted 有关字符串的排序,排序规则:小写<大写<奇数<偶数_第1张图片

不使用sorted进行排序
后面还想到了一个不用sorted方法就能输出排序后的字符串的方法:

def str_sort1(str1):
	# 使用四个列表,将 小写、大写、奇数、偶数 字符分开到四个列表中
    list_lower_letter, list_upper_letter, list_1_num, list_2_num = [], [], [], []
    for temp in str1:
        if temp.isdigit():
            if int(temp) % 2 == 0:
                list_2_num.append(temp)
            else:
                list_1_num.append(temp)
        else:
            if temp.isupper():
                list_upper_letter.append(temp)
            else:
                list_lower_letter.append(temp)
	# 对这四个列表进行分别排序
    list_lower_letter.sort()
    list_upper_letter.sort()
    list_1_num.sort()
    list_2_num.sort()
    # 最后将排序号的结果进行输出
    return ''.join(list_lower_letter + list_upper_letter + list_1_num + list_2_num)

# 让我们来看看效果吧
print(str_sort1(s))
# 得到的结果是 addffssDGS33224

与上面使用 sorted 方法排序的结果一致,至此心满意足!

你可能感兴趣的:(python,python,列表,字符串,排序)