2017-07-02 54 views
0

我最近正在解決一個編碼問題。它要求我將一個數組中的所有0移動到數組的末尾。像[0,1,1,0,0,1] - > [1,1,1,0,0,0]一樣。如何在python中將布爾值從一個數組移動到另一個數組

現實的情況是可能存在的原始陣列中任何類型的數據,例如, [0, 「A」,1,無,假,真,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

是的,我從我的手機輸入並錯過了double =,謝謝 –

0

你可以使用它做一個身份比較。請注意以下示例:

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

在算法中使用測試,檢查值是否爲整數0而不是bool。

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 is 0 >>> False – Rosh

+0

我試過你的方法,如果0.0需要爲0並放回,則0.0將放回0.0。例如,[1,0,0,0,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] 
相關問題