python 对列表实现山型排序

首先什么是山型排序,就是把一个列表做中间数值大,两边数值小的样子,假如这个序列如下:

5, 1, 6, 2, 7, 14, 12, 19, 16, 30, 17, 27, 22, 26, 28, 31, 25

如何排序呢,不多说,直接上代码,封装一个排序文件,定义好排序的类:

class Bubble:
	#类标注
	'''
	冒泡排序类
	'''
	def __init__(self):
		'''
		初始化函数
		'''
		pass

	def sort_from_big(self, lst):
		#函数标注
		'''
		倒序排列
		'''
		ret = self.sort_from_little(lst)
		#正序排列后的倒序输出
		return ret[::-1]

	@classmethod
	def sort_from_little(self, lst):
		'''
		类函数
		正序排列
		'''
		#参数检测,入参检测
		if not isinstance(lst, (list,tuple)):
			raise TypeError('参数必须为列表或元祖')
		if len(lst) < 2:
			raise ValueError('列表中数据数量至少有2个')
		for data in lst:
			if not isinstance(data, int):
				raise ValueError("数据必须为int类型")
		#防止传入tuple,无法做交换操作
		tmp = list(lst)
        #排序
		for i in range(len(tmp) - 1):
			for j in range(i,len(tmp)-1):
				if tmp[j] > tmp[j+1]:
					tmp[j],tmp[j+1] = tmp[j+1],tmp[j]#交换
		return tmp

调用文件代码如下:

from bubble import Bubble
# 查看函数标注
# help(Bubble)
# help(Bubble.sort_from_little)
# help(Bubble.sort_from_big)

#建立元祖(测试传入元祖会不会报错)
num_list = (5, 1, 6, 2, 7, 14, 12, 19, 16, 30, 17, 27, 22, 26, 28, 31, 25)
print('原始数据:', num_list)

#类函数可直接使用
num_from_little = Bubble.sort_from_little(num_list)
print('从小到大排列(类函数):', num_from_little)

#实例化使用
bbb = Bubble()
num_from_big = bbb.sort_from_big(num_list)
print('从大到小排列(实例化):', num_from_big)

#切片,0开始,2个数取一个
mountain = num_from_little[::2]
print(mountain)
#切片,先从1开始,2个数取一个;然后倒序;然后附加在mountian后边
mountain.extend(num_from_little[1::2][::-1])
print('山形输出:', mountain)

总结需要注意的地方
1.入参检测,不清楚传入的是touple还是list,所以要检查,防止不能进行排序而出错
2.切片操作很巧妙,列表后边加[::-1] 直接就是对列表倒叙排列
3.为保证山形排序,排除的山高低圆滑,使用切片操作将排序好的列表按照2个取一个方取出来,再将后部分倒叙配接,这个方法很巧妙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的Alex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值