# sort()方法语法:
# list.sort(cmp=None, key=None, reverse=False)
# 参数:
#   cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
#   key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
#   reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
# sort返回值:
#   该方法没有返回值,但是会对列表的对象进行排序。
def list_sort_test():
    a_list = ["how", 'produce', 'system_info']
    a_list.sort()
    print("List : ", a_list)
    pass

# 自定义cmp参数:
# 代码示意:
# import functools
#
# from functools import cmp_to_key
#
# def custom_sort(x, y):
#     return y[1]-x[1]
#
# # 调用cmp排序
# d.sort(key=cmp_to_key(custom_sort))
def list_sort_cmp_test():
    def custom_sort(x, y):
        return y[1] - x[1]

    a = [(1,2), (2,3),(3,4)]
    from functools import cmp_to_key
    a.sort(key=cmp_to_key(custom_sort))
    print(a)

# 也可以使用sorted方法:
#   sorted方法和sort方法很相似,不同的是,sorted不改变原来的列表,并返回一个排好序的列表
def sorted_test():
    a = [5, 2, 9, 8, 6]
    a = sorted(a)
    print(a)

    # 倒序排序为从大到小排序,使用reverse=True
    a = [5, 2, 9, 8, 6]
    a = sorted(a, reverse=True)
    print(a)

    # lambda指定key
    a = [('x', 0.56), ('a', 1.28), ('c', 2.36), ('s', 5.02), ('h', 20)]
    a = sorted(a, key=lambda x: x[0])
    print(a)

def reverse_test():
    a = [('x', 0.56), ('a', 1.28), ('c', 2.36), ('s', 5.02), ('h', 20)]
    a.reverse()
    print(a)

def list_sort_test2():
    # 获取列表的第二个元素
    def take_second(elem):
        return elem[1]

    # 列表
    random = [(2, 2), (3, 4), (4, 1), (1, 3)]
    # 指定第二个元素排序
    random.sort(key=take_second)
    # 输出类别
    print('排序列表:', random)

if __name__ == '__main__':
    print('PyCharm')