编写函数,模拟内置函数sorted
问题分析及代码展示如下
#编写函数,模拟内置函数 sorted()[参数传入问题,比较法则问题,排序方向问题]
from collections.abc import Iterable
def sort(*parameter,key = None,reverse = False):#*parameter表示任意多参数
if(isinstance(parameter[0],Iterable)):
lst = list(*parameter)#*paremeter实参进行序列解包(([],)==>[])(注意是在函数中对实参使用*进行序列解包)
else:
lst = list(parameter)
isNone = False
if not key == None:#如果指定排序法则的话,那么就需要进行另一套比较方式了
isNone = True
f = lambda x : key(x)
if not isNone:
for i in range(len(lst) - 1):
for j in range(len(lst) - 1 - i):
if lst[j] > lst[j+1]:
temp = lst[j]
lst[j] = lst[j+1]
lst[j+1] = temp
else:
for i in range(len(lst) - 1):
for j in range(len(lst) - 1 - i):
if f(lst[j]) > f(lst[j+1]):
temp = lst[j]
lst[j] = lst[j+1]
lst[j+1] = temp
if reverse:
lstReversed = []
for i in range(len(lst)):
lstReversed.append(lst[len(lst)-1-i])
lst = lstReversed
print(lst)
sort(2,4,3,5,7,1,6,0,21222,12,8,9,key = lambda x : len(str(x)))
sort([2,3,5,7,1,6,0,21222,12,8,9])
sort([2,3,5,7,1,6,0,21222,12,8,9],reverse = True)
"""sort函数文档如下
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order."""
"""判断可迭代对象的方法
from collections import Iterable
isinstance([1,2,3,4], Iterable) ==> True
"""
"""
注解
第三行*parameter实参的使用,使得parameter变为一个元组存储数据,其中元素为传入参数;
当传入为可迭代对象的时候,例如[1,2,3,4],parameter为([1,2,3,4],)==>第一个元素为可迭代对象
当传入几个数字的时候,例如1,2,3,4,paramete为(1,2,3,4)==>第一个元素为数字
"""
"""字符串数字的比较原则,例如'9' > '12'
这是为什么呢?是因为比较的是字符的编码,先进行9与1字符编码的比较,发现前者大,那么比较停止,得到结果
ord('1') = 49
ord('9') = 57
"""