2017-03-17 11 views
4

私は並べ替えたい要素のリストを持っていますが、それらをすべて並べ替えたいわけではありません。たとえば、のは、私がpeoleのリストを持っているとしましょう:Python:リスト内の特定の要素を並べ替える

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] 

1、私はソートしたいものをソートし、それらは私が後だものを達成するために、再度まとめ:straigthforward、これを行うのPython的な方法があれば、私は疑問に思う

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 

しかし。

+1

私は十分にPythonを行うためのあなたの方法を見つけます。 2番目のリストは必要ありませんが、それ以外のものはありません。 –

答えて

6

なぜ:

lst.sort(key=lambda p: p.job.hours if p.job else 999) 
+0

シンプルで効率的です。よくやった。 –

+0

このソリューションは、仕事のない人の注文を維持しますか? – Elmex80s

+0

待って、私はそれについて考えているので、このソリューションは、リストの冒頭に就職していない人々をポジションに置くのではなく、意図したとおりに終わりにするのではないでしょうか? – dabadaba

関連する問題