点击上方“Python3X”,选择“置顶或者星标”
第一时间收到精彩推送!
Python Every Day, 第 13 天
题目:
给定一个无序列表,要求按照奇数在前且正序排列,偶数在后,倒序排列。
如:[5, 1, 8, 9, 2, 3, 6, 5, 7]。
排序之后为:[1, 3, 5, 5, 7, 9, 8, 6, 2]
解一:
第一种思路,可以将题目中的列表,按照奇数、偶数分为两个列表。分别对其就行正序和倒序排列。在将其进行组合。
# 初始列表arr = [5, 1, 8, 9, 2, 3, 6, 5, 7]# 定义一个偶数列表a = []# 定义一个奇数列表b = []for i in arr: # 偶数放入a列表中 if i % 2 == 0: a.append(i) continue # 奇数放入b列表中 b.append(i)# 偶数列表倒序排列a.sort(reverse=True)# 奇数sort默认正序b.sort()b = b + a# [1, 3, 5, 5, 7, 9, 8, 6, 2]print(b)
arr = [5, 1, 8, 9, 2, 3, 6, 5, 7]
# 定义一个偶数列表
a = []
# 定义一个奇数列表
b = []
for i in arr:
# 偶数放入a列表中
if i % 2 == 0:
a.append(i)
continue
# 奇数放入b列表中
b.append(i)
# 偶数列表倒序排列
a.sort(reverse=True)
# 奇数sort默认正序
b.sort()
b = b + a
# [1, 3, 5, 5, 7, 9, 8, 6, 2]
print(b)
解二:
将列表先倒序排列,然后再遍历,当遇到奇数,将其从列表中取出并插入到第一位。
# 初始列表arr = [5, 1, 8, 9, 2, 3, 6, 5, 7]# 倒序排列arr.sort(reverse=True) # [9, 8, 7, 6, 5, 5, 3, 2, 1]for i in range(len(arr)): if arr[i] % 2 != 0: # 遇到偶数时,将其从列表中移除(pop),并将其放入第一位 arr.insert(0, arr.pop(i))print(arr) # [1, 3, 5, 5, 7, 9, 8, 6, 2]
arr = [5, 1, 8, 9, 2, 3, 6, 5, 7]
# 倒序排列
arr.sort(reverse=True) # [9, 8, 7, 6, 5, 5, 3, 2, 1]
for i in range(len(arr)):
if arr[i] % 2 != 0:
# 遇到偶数时,将其从列表中移除(pop),并将其放入第一位
arr.insert(0, arr.pop(i))
print(arr) # [1, 3, 5, 5, 7, 9, 8, 6, 2]
解三:
利用sorted函数和lambda进行自定义排序。当为偶数时,返回比原始列表最大的数还要打的数即可。当为奇数是,返回本身
arr = [5, 1, 8, 9, 2, 3, 6, 5, 7]# [1, 3, 5, 5, 7, 9, 8, 2, 6]print(sorted(arr, key=lambda x: x % 2 == 0 and 20 - x or x))1, 8, 9, 2, 3, 6, 5, 7]
# [1, 3, 5, 5, 7, 9, 8, 2, 6]
print(sorted(arr, key=lambda x: x % 2 == 0 and 20 - x or x))
往期Python Every Day
[每日一题]3、Python实现删除list中重复元素的几种方式
[每日一题]2、Python中的类的定义和装饰器@classmethod与@staticmethod
感谢您的阅读