使用Tuple与Lambda时sorted报'Tuple'不可调用错误的原因排查
问题分析与解决
你的代码报错是因为key参数被错误地传成了一个元组,而sorted()要求key必须是一个可调用对象(比如函数、lambda表达式这类)。
看你的代码:
list_ = [(34, 21, 56), (24, 12, 32), (42, 34, 42), (27, 11, 32)] m = sorted(list_, key=(lambda x: x[1], list_)) print(m)
这里key=(lambda x: x[1], list_)是把lambda表达式和list_打包成了元组,当sorted尝试调用这个元组作为排序依据时,自然会抛出“元组不可调用”的错误。
正确写法
只需要把key参数改成单独的lambda表达式即可,不需要额外传入list_——sorted已经通过第一个参数明确了要排序的对象:
list_ = [(34, 21, 56), (24, 12, 32), (42, 34, 42), (27, 11, 32)] m = sorted(list_, key=lambda x: x[1]) print(m)
运行这段代码就能得到你预期的输出:
[(27, 11, 32), (24, 12, 32), (34, 21, 56), (42, 34, 42)]
内容的提问来源于stack exchange,提问作者bamb1
相关产品推荐
相关产品推荐

