2017-07-07 17 views
1

リストをフィルタリングして、0のすべてをリストの最後に移動して、他のすべてをそのまま残したい。条件が満たされた場合にPythonが拡張してポップアップする

リストを列挙しました。アイテムが0の場合、リストを拡張してインデックスからアイテムを削除します。私はこれをどのようにするべきですか?

これは私のコードです。

def move_zeros(array): 
    for index, item in enumerate(array): 
     if item == 0: 
      array.extend(item, array.pop(index)) 
    return array 
+1

リストを変更しています。これは良い考えではありません。 –

答えて

4

あなたは二つのリストを作成し、それらを

def move_zeros(array): 
    l1 = [v for v in array if v != 0] 
    l2 = [v for v in array if v == 0] 
    return l1 + l2 

この方法を追加することができ、あなたは秩序を維持し、また、新しいリストを作成することによって、あなたは普通ではない場所でリストを、変更いけません良いアイデア

もちょうどあなたが元の配列の長さの差をとることから、取得0の数に等しい長さとL1

のゼロの配列を生成し、リスト内包とL2を作成する場合は代わりに何をして動作するはずです
l2 = [0] * (len(array) - len(l1)) 
+1

'where'ではなく' where'ですか? –

+1

あなたは正しいです、ありがとう;) – chrise

+0

この方法でフィルタリングすると、偽の値はゼロにもなりますので、これを削除します – sayth

関連する問題