可以在sorted()中作为comprarison键迭代?

时间:2012-07-22 10:53:23

标签: python sorting

假设我想对行进行排序,我希望解决与下一列的任何关系,后续与下一列的关系等等。

在python中,相当于 sorted(rows,key = itemgetter(1,2,3,4,...))

我尝试编写自己的生成器但排序不会迭代生成器,因为它与元组itemgetter返回。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

由于注释中提到的原因,您无法对尚未创建的事物列表进行排序。生成器的存在是为了在请求时产生结果,因此您无法对未迭代的迭代进行排序(与list(generator())一样。

换句话来说,我正在考虑十个名字,但我没有告诉你它们是什么,请按字母顺序排序。您应该回答“如果您没有将它们交给我,我怎么能对它们进行排序?”你是对的:你做不到。

答案 1 :(得分:0)

好的,这就是你说你想做的事情:

  

我想对行进行排序,我希望解决与下一列的任何关系,后续与下一列的关系等等。

请注意,首先,key参数的文档执行以下操作:

  

key 指定一个参数的函数,用于从每个列表元素中提取比较键

因此,您的itemgetter想法并不完全正确,因为只有在比较相同时才想在列表中移动。

然而,事情实际上比你想象的容易得多。查看Python docs(另请参阅this SO question。):

  

序列类型也支持比较。特别是,通过比较相应的元素,按字典顺序比较元组和列表。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型并且具有相同的长度。 (有关完整详细信息,请参阅语言参考中的Comparisons。)

我认为,如果您确保每一行都是等长序列(列表或元组),那么正是您想要的

(啊哈,我刚刚阅读了关于产生密钥的die-roll函数的评论。令人困惑 - 不确定上述情况是否有用,但我不确定你的问题究竟是否有意义...)