Discuss / Python / 学习笔记

学习笔记

Topic source

1、sorted()比较顺序

L_x = [('Bob', 60), ('Adam', 75), ('Bob', 75), ('Lisa', 60)]
print(sorted(L_x))

#输出: [('Adam', 75), ('Bob', 60), ('Bob', 75), ('Lisa', 60)]

2、”key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序“

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

def by_score(t):
    # 看看函数对参数做了啥
    print(f'{-t[1]=}')
    return -t[1]
L2 = sorted(L, key=by_score)
print(L2)

'''输出:
-t[1]=-75
-t[1]=-92
-t[1]=-66
-t[1]=-88
[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
'''

3、-t[1]是如何与t对应的呢,想到dict, 猜测着模拟下:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

L_dict = {}
def by_score(t):
    L_dict[-t[1]] = t
    return -t[1]
L2 = sorted(L, key=by_score)
print(f'{L2=}')
print(f'{L_dict=}')
for k in sorted(L_dict):
    print(k,L_dict[k])

'''输出:
L2=[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
L_dict={-75: ('Bob', 75), -92: ('Adam', 92), -66: ('Bart', 66), -88: ('Lisa', 88)}
-92 ('Adam', 92)
-88 ('Lisa', 88)
-75 ('Bob', 75)
-66 ('Bart', 66)
'''

4、把元素换成索引,写自己的sorted():

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

def by_score(t):
    return -t[1]

def my_sorted(obj, key):
    index = 0
    my_dict = {}
    for item in obj:
        my_dict[key(item)] = index
        index += 1
    print(my_dict)
    new_list = list()
    for k in sorted(my_dict): # ^_^
        new_list.append(obj[my_dict[k]])
    return new_list

L4 = my_sorted(L, key=by_score)
print(L4)

'''输出:
{-75: 0, -92: 1, -66: 2, -88: 3}
[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
'''

  • 1

Reply