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]]

"""

 

posted @ 2023-02-05 20:33  朵朵奇fa  阅读(468)  评论(0编辑  收藏  举报