我有一个我想要排序的元素列表,但我不想对所有这些元素进行排序,只有那些具有特定状态的元素。例如,让我们说我有一份人员名单:
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方式。
答案 0 :(得分:6)
为什么不:
lst.sort(key=lambda p: p.job.hours if p.job else 999)