我在控制台上遇到以下错误
newList = sorted(l,key=sort)
NameError: name 'sort' is not defined
执行以下代码后:
if __name__ == '__main__':
l= [[input(), float(input())] for _ in range(int(input()))]
print( l)
new = sorted(l,key=sort)
print(new)
从given文章中,我了解到key
中的sorted()
参数可以使用用户/内置的Python方法。我试图按字母顺序对列表进行排序,因此我通过了key=sort
,并理解它将按字母顺序对列表进行排序。
请帮我解决我在哪里出问题。
答案 0 :(得分:3)
sorted()
函数具有一个名为key
的可选参数,该参数将函数作为其值。此键函数在排序之前转换每个元素,它获取值并返回1个值,然后在排序中使用该值代替原始值。
示例:
如果有元组列表,
li = [('p1', 20), ('p2', 10), ('p3', 30)]
并且您想要对列表中的元素进行排序,使得结果顺序如下:
输出:li = [('p2', 10), ('p1', 20), ('p3', 30)]
然后,您要做的就是根据每个元组中的第二个元素对元组进行排序。 为此,我们需要使用一种自定义方法,该方法将应用于每个元素,并且将根据每个元素的代表(即KEY)对元素进行排序。
因此,其语法将如下所示:
sorted(li, key=lambda x: x[1])
编辑:
排序本身就是一个函数,用于按特定顺序排列元素。但是,它不能用于为列表中的每个元素提取代表(即KEY)。
答案 1 :(得分:1)
嗯,sort
不是用户/内置的Python函数。它是列表中的方法,但不是全局可访问的名称。即使您使用它(通过key=list.sort
),也不会得到您想要的结果,因为键功能用于在排序之前转换每个 element 。
默认情况下(不指定key
参数),sorted
应该已经按字母顺序对字符串进行排序(排序),与包含以字符串作为第一项的列表的列表相同。如果要将"A"
和"a"
(以及"Z"
和"z"
)一起排序,可以使用键函数str.lower
,但是您需要将其仅应用于内部列表的第一个元素:
new = sorted(l, key=lambda x: x[0].lower())