【发布时间】:2017-03-17 09:21:33
【问题描述】:
我有一个要排序的元素列表,但我不想对所有元素进行排序,只对具有特定状态的元素进行排序。例如,假设我有一个人员列表:
lst = [Mary, John, Anna, Peter, Laura, Lisa, Steve]
他们中的一些人有工作,比如说[Anna, Lisa, Steve]。我想按它们工作的小时数对它们进行排序(升序)并将它们移动到列表的开头,同时保持其余部分的顺序完全相同。所以假设他们工作的小时数如下:
Anna.job.hours # 10
Lisa.job.hours # 5
Steve.job.hours # 8
部分排序后的列表如下所示:
[Lisa, Steve, Anna, Mary, John, Peter, Laura]
当然,我可以从原来的列表中创建两个新列表,对我想要排序的列表进行排序,然后再次将它们放在一起以实现我所追求的:
with_job = [person for person in lst if person.job]
without_job = [person for person in lst if not person.job]
with_job.sort(key=lambda p: p.job.hours)
lst = with_job + without_job
但我想知道是否有一种直接的 Pythonic 方式来做到这一点。
【问题讨论】:
-
我发现你做 Pythonic 的方式已经足够了。您不需要第二个列表,但除此之外..
标签: python python-2.7 sorting