Discuss / Python / 你们怎么写那么复杂?

你们怎么写那么复杂?

Topic source

Dreamer_DK

#1 Created at ... [Delete] [Delete and Lock User]

作业1:


    return t[0]

作业2

def by_score(t):
    return t[1]

L2 = sorted(L,key=by_score,reverse=True)

就算还有大小写错位,题1加上一句改成

    retur t[0].lower()

就行了吧?

littleQ启程

#2 Created at ... [Delete] [Delete and Lock User]

厉害! 请问这里的t 指的是什么意思呢,如果list里面不是tuple还能这么表示吗?

_Ljj110719

#3 Created at ... [Delete] [Delete and Lock User]
  • t是参数名,起这个名字只是方便理解,这里理解为tuple,因为L这个list的每一个元素是一个tuple。不是tuple也能这样用啊(不信你试试 L=[['Bob', 75], ['Adam', 92], ['Bart', 66], ['Lisa', 88]]) 。L[0]不就是把L的第一个元素打出来嘛。。题中所给L的元素是tuple只是为了防止改动吧,你去看看之前的使用list和tuple这一节 不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
  • 你要知道这篇教程还是在高阶函数这一节里面的,也就是说可以根据MapReduce以及filter来理解。
  • 举个栗子,一开始廖老师也讲了

    sorted([36, 5, -12, 9, -21], key=abs)
    

    key指定的函数abs将作用于list的每一个元素上, key指定的函数abs将作用于list的每一个元素上, key指定的函数abs将作用于list的每一个元素上, 然后根据每个元素的大小或者字符的ASCII值排序

  • 层主的代码是省略版的,完整的就是这样

L=[('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def sort_by_name(t):
    return t[0]
def sort_by_score(t):
    return t[1]
print(sorted(L, key=sort_by_name))
print(sorted(L, key=sort_by_score, reverse=1))

也就是首先把sort_by_name作用于list的每一个元素上,根据返回的结果['B','A','B','L']再来排序,不过有两个'B', 那就要回去再做一次

  • 反正最后得到的结果是
    [('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
    
    [('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
    

为什么returnt[0]就是按照字母大小排序啊 那return T[1]又是怎么回事?

罗修TM

#5 Created at ... [Delete] [Delete and Lock User]

回复楼上,t[1]对应的是数字,你可以运行代码确认

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
for t in L:
    print(t[0])
    print(t[1])

有点不理解这个return(t[0]),在L这个list里面是怎么进行的?

FromZero12

#7 Created at ... [Delete] [Delete and Lock User]

为什么在按成绩排序的时候,reverse=1 而不是 reverse=False?

posroachips

#8 Created at ... [Delete] [Delete and Lock User]

楼上,

reverse=1 或者 reverse=True 表明我要列表倒序

reverse=False 是默认参数

你可以在 Python 交互式界面里面打

>>> help(sorted)

来看

Help on built-in function sorted in module builtins:

sorted(iterable, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customise the sort order, and the
    reverse flag can be set to request the result in descending order.

此处返回t[0]返回之后是把所有t[0]变成了一个列表么?然后L会按照t[0]的列表进行排序?

key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序,可以这样理解么?


  • 1
  • 2

Reply