解释这个Lambda函数Python

时间:2014-05-07 18:28:22

标签: python sorting lambda

我需要在格式化之前对字典文件进行排序。我使用了list.sort并把它放了 以ascii顺序(小写前的大写字母)。所以我在网上找到了这个代码来进行排序。它有效,但我不完全理解lambda如何使用2个变量和cmp()。我很困惑cmp正在比较以及lambda正在使用哪两个变量。请解释lambda如何在sort函数中使用cmp。

f = open("swedish.txt", 'r')
f2 = open("swed.txt", 'w')
doc = f.read().split('\n')

doc.sort(lambda x, y: cmp(x.lower(), y.lower()))

for line in doc:
    f2.write(line + '\n')

f.close()
f2.close()

2 个答案:

答案 0 :(得分:5)

要对列表[b,a,c]进行排序,必须将a与b和a与c进行比较,依此类推。没有别的东西可以做这个lambda,它将列表中的两个组件相互比较。 对于您的情况,关键参数更合适:

doc.sort(key=str.lower)

答案 1 :(得分:1)

@Danial对小写比较有更好的答案。但是因为你在python 2.x中询问了lambda,你可以传入一个比较函数,该函数接受2个变量并返回-1,0,1,这取决于var 1是否小于,等于或大于var 2。此功能已在python 3中删除,因此请考虑弃用。

lambda只是一个没有被分配给变量的函数,它通常用于这样的情况,其中一个调用需要一个函数,但你不想用小函数乱丢你的代码定义。 lambda x,y:表示您正在使用变量x和y定义函数,cmp(x.lower(), y.lower())是实现。在这种情况下,你小写字符串,cmp返回-1,0或1,如sort需要。

由于您只想减少案例,因此cmp解决方案比关键解决方案慢得多。使用key =,您只需将键小写一次,使用cmp函数,您可以为每个比较小写两个键。