【发布时间】:2015-10-23 10:21:31
【问题描述】:
我根据对象的一个属性对一些对象进行排序,使用如下:
sorted_list = sorted(unsorted_list, key=lambda x: x.my_attr)
有没有办法对这些对象的列表进行排序,就像 Python 可以对整数列表进行排序一样?我可以为这些对象重载__cmp__(self, other),但这会给外部包带来困难。嵌套也可能变得任意深,所以我认为我不能只使用列表推导。
我想知道是否可以生成my_attrs 列表并将其链接到相应的对象列表。我想不出一个很好的方法来临时做。
【问题讨论】:
-
您能否展示嵌套列表的示例,也许有更好的方法可以在不生成
my_attr列表的情况下做到这一点。 ?还包括预期输出 -
[[340 N N, 338 C C], [344 C CB, 350 C CG1], [357 C C, 358 O O], [343 H HA]]这是第一级递归的一个例子。对象是原子,我想做的是根据Cahn Ingold Prelog rules 进行排序。导致嵌套的是第 2 步中的扩展,我使用的属性是原子的原子序数。 -
你应该edit你的问题并添加。
-
您是要对每个列表中的原子进行排序,还是要对包含原子的列表的顺序进行排序?
-
您解释了重载“__cmp__”有什么问题。但是您给出的示例行有什么问题?您是否要在比较中考虑多个属性?然后,不是将键传递给 sorted(),而是传递一个比较函数,作为参数 cmp。