嘗試將1/0列表轉換爲布爾列表。python:將1/0s列表轉換爲布爾值列表
bool([1,0,1,0])
似乎不起作用。 [1,0,1,0] == 1
不起作用。
有沒有另一種方法(希望非列表理解)?
嘗試將1/0列表轉換爲布爾列表。python:將1/0s列表轉換爲布爾值列表
bool([1,0,1,0])
似乎不起作用。 [1,0,1,0] == 1
不起作用。
有沒有另一種方法(希望非列表理解)?
在Python 2
bool_list = map(bool,int_list)
在Python 3:
bool_list = list(map(bool,int_list))
可能值得注意的是'map'不會返回Python 3中的列表。 – Sayse
是的。謝謝@Sayse –
試試這個,應用列表解析:
lst = [1, 0, 1, 0]
[bool(x) for x in lst]
=> [True, False, True, False]
[x==1 for x in list]
是一種通用的方法,你可以很容易地適應你應該有一個列表ent不是0
或1
。
這是迄今爲止已經發布的最快速的方法:根據timeit,'map()'爲0.31秒和'bool()'爲0.60秒 – TemporalWolf
@TemporalWolf我不相信。 – miradulo
@Mitch然後你自己運行timeit。即使是廣義的'timeit.timeit(「[對於第一個x不是x == 0],」lst = [1,0,1,0]「)''在'bool()'版本的一半時間內運行(它會將所有的int轉換爲bools)。 – TemporalWolf
使用numpy
模塊解決方案:
import numpy as np
l = np.array([1,0,1,0])
print((l > 0).tolist())
輸出:
[True, False, True, False]
l > 0
- 數組l
的每個元件進行測試,如果它比0
更大。多維數組打交道時,這些測試的結果是結果陣列
這種方法的布爾元素也相當不錯:
l = np.array([[1,0,1,0], [1,1,1,1], [0,0,1,0]])
print((l > 0).tolist())
輸出:
[[True, False, True, False], [True, True, True, True], [False, False, True, False]]
這似乎是一個XY的問題,是有東西,你實際上是想既然你解決可以使用1和0作爲布爾值,它仍然可以工作... – MooingRawr
爲什麼你不想使用列表理解? – BrenBarn
後人:[Python 3.5.2](https://repl.it/F5K7/2)和[Python 2.7.10](https://repl.it/F5K4/1)各種答案之間的速度比較,按性能排序。 – TemporalWolf