在字符串列表上使用sorted和key参数

时间:2014-03-29 01:25:32

标签: python string sorting lambda

好的,我提前道歉 - 我是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]?

2 个答案:

答案 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