我想用对象的一个属性对它们进行排序。到目前为止,我将按照以下方式来做
USpeople.sort(key=lambda person: person.utility[chosenCar],reverse=True)
这个很好,但是我读过运算符.attrgetter()可能是实现这一目标的更快方法。首先,这是正确的吗?假设它是正确的,我如何使用运算符.attrgetter()来实现这一目标?在
我试过了
^{pr2}$但是,我得到一个错误,说没有属性'utility[chosenCar]'。在
问题是我要排序的属性在字典中。例如,“工具”属性的格式如下:
utility={chosenCar:25000,anotherCar:24000,yetAnotherCar:24500}
我想按chosenCar的用途分类运算符.attrgetter(). 我怎么能这么做?在
提前谢谢。在
要访问
chosenCar
项,您必须使用:对于
^{pr2}$key
函数,您必须执行以下操作:然而,你关于这种方法更好的性能的主要主张似乎研究得不充分。我建议使用^{} 模块来测试这两种方法对您自己的数据的性能。在
不,
attrgetter
不会比lambda快——它实际上只是做同样事情的另一种方式。在您可能对使用
key
而不是cmp
的建议感到困惑,这确实快得多,但您已经这样做了。在永远不要,永远不要基于你读过的东西进行优化。进入你的代码,从你所拥有的随机改变到你认为应该更快的东西,这不是一个有效的优化策略。
如果你想改进你的代码,这里是如何优化的。在
如果你不能改进你的算法,测试不同的代码片段做同样的事情为基础,看看他们如何执行。使用http://docs.python.org/library/timeit.html测试代码段(这比人们意识到的要难,所以要小心)并重新运行性能测试和配置文件。在
尝试提前做这一步是很诱人的,但这往往是徒劳的。你需要知道你正在优化的东西是有意义的。
我希望这能提供一些关于如何加速代码(以及何时不需要麻烦)的见解。我见过很多人尝试用经验法则优化来代替随机代码,但我还没见过那些人开发出好的、快速的软件。优化必须科学地进行,使用理论(如6中的计算机科学)和实验(如7中的时间安排)。
在这种情况下,我敢打赌SilentGhost的代码最终会比你的慢。我当然不确定,但你也不知道,除非你确定时间。在
(我不认为你应该费心去计时,我认为你应该采用最清晰的方法,你最初的方法。)
相关问题 更多 >
编程相关推荐