最初級實現法
#sorted 實現
lst = [1,2,5,4,2,3,5,6]
def sort(iterable):
ret = []
for x in iterable: #迭代原來的數據
for i,y in enumerate(ret): #迭代新的列表里的元素,并輸出他們的角標
if x > y:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sort(lst))
進階
lst = [1,2,5,4,2,3,5,6]
def sort(iterable,reverse = False):
ret = []
for x in iterable: #迭代原來的數據
for i,y in enumerate(ret): #迭代新的列表里的元素,并輸出他們的角標
flag =x > y if not reverse else x < y
#這里是布爾值
if flag:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sort(lst))
嵌套函數的實現
lst = [1,2,5,4,2,3,5,6]
def sort(iterable,reverse = False):
#以下為重點,嵌套函數,為內部函數
def comp(a,b):
# flag = a > b if not reverse else a < b
return a > b if not reverse else a < b
ret = []
for x in iterable: #迭代原來的數據
for i,y in enumerate(ret): #迭代新的列表里的元素,并輸出他們的角標
#這里是布爾值
if comp(x,y):
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sort(lst))
高階函數,參數是函數,簡單實現
#sorted 實現
lst = [1,2,5,4,2,3,5,6]
def comp(a, b):
return a > b
#符合高階函數,參數key = comp為函數
def sort(iterable,key = comp):
#以下為重點,嵌套函數,為內部函數
ret = []
for x in iterable: #迭代原來的數據
for i,y in enumerate(ret): #迭代新的列表里的元素,并輸出他們的角標
#這里是布爾值
if comp(x,y):
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sort(lst))
最終想要的額結果
#sorted 實現
lst = [1,2,5,4,2,3,5,6]
def comp(a, b):
return a > b
#符合高階函數,參數key = comp為函數
def sort(iterable,key = comp,reverse = False):
ret = []
for x in iterable: #迭代原來的數據
for i,y in enumerate(ret): #迭代新的列表里的元素,并輸出他們的角標
flag = comp(x,y) if reverse else comp(y,x)
#這里是布爾值
if flag:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sort(lst))