假设我想对行进行排序,并且我想解决与下一列的任何联系、与下一列的后续联系等。
在 python 中,相当于sorted(rows, key=itemgetter(1, 2, 3, 4, ...))。
我尝试编写自己的生成器,但 sorted 不会像元组 itemgetter 返回那样遍历我的生成器。有什么建议吗?
由于评论中提到的原因,您无法对尚未创建的事物列表进行排序。生成器的存在是为了在被要求时产生结果,因此您无法对尚未迭代的可迭代对象进行排序(如list(generator())
.
用更普通的话来说,我在想十个名字,但还没有告诉你它们是什么,请按字母顺序排列它们。你应该回答“当你没有把它们给我时,我该如何分类它们?” 你是对的:你不能。
好的,这就是你说你想做的事情:
我想对行进行排序,并且我想解决与下一列的任何联系,与下一列的后续联系等。
请注意,首先,该key
参数的文档执行以下操作:
key指定一个参数的函数,用于从每个列表元素中提取比较键
所以你的itemgetter
想法并不完全正确,因为你只想在比较相等时才在列表中移动。
然而,事情实际上比你想象的要容易得多。查看Python 文档(另请参阅此 SO 问题。):
序列类型也支持比较。特别是,元组和列表通过比较相应的元素来按字典顺序进行比较。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同的类型并且具有相同的长度。(有关详细信息,请参阅语言参考中的比较。)
我认为,如果您只是确保每一行都是等长序列(列表或元组),那么这正是您想要的。
(啊哈,我刚刚阅读了有关die-roll
生成密钥的功能的评论。令人困惑 - 不确定上述内容在这种情况下是否有帮助,但我不确定你的要求实际上是否有意义......)