python 排序的几种方式(内置排序函数, 选择排序, 冒泡排序)
#python 排序的方法 #Python 列表有一个内置的 list.sort() 方法可以直接修改列表 list1 = [1,3,5,10,2,1] list1.sort() print(list1) list1 = [1,3,5,10,2,1] list1.sort(reverse=True) print(list1)
def sortLot(inputString):
import re
com = re.compile(r"\d+")
mo = com.search(inputString)
if mo.group() is None:
print("nonnn")
else:
print(mo.group(0))
return mo.group(0)
strings2 = ['lotID123shu',"lotID111shun2","lotID234shun3"]#按照这里面的数字来排序
strings2.sort(key=sortLot)#key代表着关键字, 表示用什么关键字来排序,所以sortLot函数只需要return出关键字就可以了
print(strings2)#['lotID111shun2', 'lotID123shu', 'lotID234shun3']
#python 排序的方法 #python还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表。 #返回值是列表 list1 = [1,5,2,1,10] newlist = sorted(list1,reverse=True) print(newlist) #而 sorted() 函数可以接受任何可迭代对象。 print(sorted({1: 'D', 2: 'B', 10: 'B', 4: 'E', 5: 'A'}))# [1, 2, 4, 5, 10] #key 形参的值应该是个函数(或其他可调用对象),它接受一个参数并返回一个用于排序的键 student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] print(sorted(student_tuples, key=lambda x: x[2]))
选择排序
#选择排序方法,假设无序的集合中, 第一个是最小的, 然后搜扫描剩下的集合,如果遇到比它还小的,那么久交换位置 #选择排序的基本思想就是每次寻找为排序集合里面的最小值 def selectSort(nums): for i in range(len(nums)): minIndex = i#假设第一个是最小的 for j in range(i+1,len(nums)):#扫描剩下的集合 if nums[j] < nums[minIndex]:#遇到比上面那个还小的, 就交换位置 temp = nums[i] nums[i] = nums[j] nums[j] = temp #这样第一轮找下来, 就能知找到最下的值 #第二轮找下来就能找到第二小的值 return nums print(selectSort([1,3,2,5]))
冒泡排序
def bubbleSort(a):
length = len(a)
for i in range(length):#第一次循环会找到最小的值, 经过交换位置之后,在内层循环结束的时候, 最大值会处于数组的末尾。每一次外层循环结束都会知道剩下未排序数组的最大值
for j in range(length-i-1):#循环的时候,由于有j+1的存在, 所以只需要到length-i-1的边界条件
if a[j] > a[j+1]:#遇到相邻位置更小的值就交换位置
temp = a[j]
a[j] = a[j+1]
a[j+1] = temp
return a
print(bubbleSort([1,3,2,5,0]))
list_num = [[25,18],[18,19],[12,20],[18,18]]
#key 指定一个参数的函数,用于从每个列表元素中提取比较键:key=str.lower。默认值为 None (直接比较元素)。
print(sorted(list_num,key = lambda x: x[0]))#按照第一个元素排序
print(sorted(list_num,key = lambda x: x[1]))#按照第二个元素排序
print(sorted(list_num,key = lambda x: (x[0],x[1])))#先按照第一个元素排序, 再按照第二个元素排序
print(sorted(list_num,key = lambda x: (x[1],x[0])))#先按照第二个元素排序,在按照第一个元素排序
"""
[[12, 20], [18, 19], [18, 18], [25, 18]]
[[25, 18], [18, 18], [18, 19], [12, 20]]
[[12, 20], [18, 18], [18, 19], [25, 18]]
[[18, 18], [25, 18], [18, 19], [12, 20]]
"""
from operator import itemgetter, attrgetter
print(sorted(list_num,key = itemgetter(0,1)))#先按照第一个元素排序, 再按照第二个元素排序
print(sorted(list_num,key = itemgetter(1,0)))#先按照第二个元素排序,在按照第一个元素排序
"""
[[12, 20], [18, 19], [18, 18], [25, 18]]
[[25, 18], [18, 18], [18, 19], [12, 20]]
[[12, 20], [18, 18], [18, 19], [25, 18]]
[[18, 18], [25, 18], [18, 19], [12, 20]]
[[12, 20], [18, 18], [18, 19], [25, 18]]
[[18, 18], [25, 18], [18, 19], [12, 20]]
"""