好的,我提前道歉 - 我是python的新手,我确信有类似的问题,但坦率地说,到目前为止学习python的最难的部分是围绕语法和lambda排序的使用。
我有一个字符串列表,每个字符串都以换行符和数字开头。像:
27 Tacos Cheese Mango Habanero Salsa
42 Burritos Cheese Beans Beef
7 Chocolates Cherry Strawberry Vanilla
我想根据字符串开头的数字对此列表进行排序。从我(非常有限)对lambda的理解和这里的文档中的例子:https://wiki.python.org/moin/HowTo/Sorting,我觉得这应该有用:
sort = sorted(string.split('\n'), key=string.split()[0])
for i in sort: print i
所以我的问题有两个:
我做错了什么?
和
我是否可以通过第5个字轻松地对这个字符串列表进行排序;即string.split()[4]?
答案 0 :(得分:2)
你很亲密。 key
必须指定一个带有一个参数的函数。但是,您正在尝试使用列表元素作为参数。试试这个:
>>> string = '''27 Tacos Cheese Mango Habanero Salsa
349 Tacos Cheese Mango Habanero Salsa
1 Tacos Cheese Mango Habanero Salsa'''
>>> sorted(string.split('\n'), key=lambda x: int(x.split()[0])) # the function is the lambda expression
['1 Tacos Cheese Mango Habanero Salsa', '27 Tacos Cheese Mango Habanero Salsa', '349 Tacos Cheese Mango Habanero Salsa']
lambda表达式是一个匿名函数,与以下函数相同:
def name(x):
return int(x.split()[0])
但在将函数用作sorted
函数的键之前,您不必声明该函数。
是的,只要有第五项,你也可以对列表的第五项做同样的事情:
>>> sorted(string.split('\n'), key=lambda x: x.split()[5])
['27 Tacos Cheese Mango Habanero Salsa', '349 Tacos Cheese Mango Habanero Salsa', '1 Tacos Cheese Mango Habanero Salsa']
答案 1 :(得分:0)
未绑定到名称的函数是Lambda函数。例如:
g = lambda x: x+2
与:def f (x): return x+2
相同
即:
>>> f(8)
10
>>> g(8)
10