2017-07-02 10 views
0

私は最近、コーディングの問題を解決しています。 1つの配列内のすべての0を配列の末尾に移動するように求められます。 [0,1,1,0,0,1]→[1,1,1,0,0,0]のようになります。Pythonである配列から別の配列にブール値を移動する方法

現実は、例えば、元の配列内のデータの任意のタイプが存在する可能性がある、 [0、 "A"、1、なし、FALSE、TRUE、0、0、20、1、0.0]

私がやっていることは、配列がループしているかどうかです。配列が0かどうかを比較し、そうであれば別の配列に入れます。そうでない場合は、カウンターを増やし、最後にカウンターと同じ量の0を入れます。しかし、ブール値Falseを0として扱うので、できません。Falseを0から切り離し、別の配列にPythonでFalseとして入れることができるのではないかと不思議です。おかげさまで

+0

これは、アルゴリズム設計を求めている割当か、ソート順で使用することができますか? – Rosh

+1

'False'は' 0'として実装されますが、他の型を持ちます。だから、値とタイプをチェックしてください! –

+0

@KlausD。これを試してください: 'isinstance(True、int)' –

答えて

0

あなたは、文字列

if (str(my_list[i])=="0"): 
#where i is iterative 

としてすべての値を比較し、あなたの代わりに、整数のゼロの文字列に目を光らせておく必要があるならば、それはだことを確認し、int型にするために型チェックを行うことができます。

+1

ここでは比較を行っていません。あなたは '=='が必要で、周囲のかっこは必要ありません。 – idjaw

+1

ええ私は私の携帯電話から入力してダブルを逃した=、おかげです。 –

0

は、同一性比較を行うです。次の例に従ってください。

>>> n = 0 
>>> n is 0 
True 
>>> n is False 
False 
>>> False is n 
False 
1

アルゴリズムのテストを使用して、値が整数0でありブールではないことを確認します。

test = lambda x: True if x is 0 else False 

list_ = [0, "A", 1 , None, False, True, 0, 0, 20, 1, 0.0] 

print(sorted(list_, key=test)) #['A', 1, None, False, True, 20, 1, 0.0, 0, 0, 0] 
+0

問題では、0.0は0として扱われ、検出された場合、0ではなく0.0で配列の最後に置かれます。 – LVmiao

+0

0.0は0です>>> False – Rosh

+0

私はあなたの方法を試しました、0.0は0.0に戻され、0.0にする必要がある場合は問題に戻ります。たとえば、[1,0,0,2,0,0,1]は[1,2,1,0,0,0]にする必要があります。 – LVmiao

0

sortedの別の方法があります。

>>> x = [1, 0, 'A', 5, 0, 'foo', 0.0, True] 
>>> sorted(x, key=lambda x: not x is 0, reverse=True) 
[1, 'A', 5, 'foo', 0.0, True, 0, 0] 
関連する問題