dab*_*aba 5 python sorting python-2.7
我有一个我想要排序的元素列表,但我不想对所有这些元素进行排序,只有那些具有特定状态的元素.例如,假设我有一个peole列表:
lst = [Mary, John, Anna, Peter, Laura, Lisa, Steve]
Run Code Online (Sandbox Code Playgroud)
我们中的一些人有工作,比方说[Anna, Lisa, Steve]
.我希望按照它们工作的小时数对它们进行排序(升序)并将它们移动到列表的开头,同时保持其余的顺序完全相同.那么让我们说他们工作的小时数如下:
Anna.job.hours # 10
Lisa.job.hours # 5
Steve.job.hours # 8
Run Code Online (Sandbox Code Playgroud)
部分排序后,列表将如下所示:
[Lisa, Steve, Anna, Mary, John, Peter, Laura]
Run Code Online (Sandbox Code Playgroud)
当然,我可以创建两个原始列表中的新列表,对我想要排序的列表进行排序,然后将它们组合在一起以实现我的目标:
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
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有一种方法式的Pythonic方法.
为什么不:
lst.sort(key=lambda p: p.job.hours if p.job else 999)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
351 次 |
最近记录: |