2017-02-02 5 views
-1

1/0のリストをbooleanのリストに変換しようとしています。python:1/0sのリストをbooleanのリストに変換する

bool([1,0,1,0])は機能していないようです。 [1,0,1,0] == 1は機能しません。

別の方法(うまくいけば非リストの理解)がありますか? python 3では

+3

ないだけをx==1以上の利点を持っていますブール値として1と0を使用することができ、それでも機能します... – MooingRawr

+0

なぜあなたはリスト内包表記を使いたくありませんか? – BrenBarn

+0

後継用:[Python 3.5.2](https://repl.it/F5K7/2)と[Python 2.7.10](https://repl.it/F5K4/1)のさまざまな回答の速度比較、パフォーマンスによってソートされます。 – TemporalWolf

答えて

5
Pythonで
bool_list = map(bool,int_list) 

bool_list = list(map(bool,int_list)) 
+3

恐らく 'map'はPython 3のリストを返しません。 – Sayse

+1

はい。ありがとう@Sayse –

1

リストの内包表記を使用して、これを試してみてください:

lst = [1, 0, 1, 0] 
[bool(x) for x in lst] 
=> [True, False, True, False] 
2
[x==1 for x in list] 

は、あなたが簡単にできる一般的なアプローチでありますあなたがentとのリストを持っていれば適応するまたは0または1以外のries。

+0

これは、すでに投稿された3つのうち、最も速い方法です: 'map()'の.31秒vs .54秒、 'bool()'の.60 timeitによる – TemporalWolf

+0

の@TemporalWolf私は確信していません。 – miradulo

+0

@Mitchその後、自分でtimeitを実行します。一般化された 'timeit.timeit(" x instのxは0でない "、" lst = [1、0、1、0] ")' bool() 'バージョンの半分で実行されます(これはすべてのintをboolに変換します)。 – TemporalWolf

1

numpyモジュール使用溶液:

import numpy as np 

l = np.array([1,0,1,0]) 
print((l > 0).tolist()) 

出力:

[True, False, True, False] 

l > 0を - それは0よりも大きいかどうアレイlの各要素は、試験されます。

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]] 
0
これらの試験の結果は、多次元配列を扱う場合、このアプローチは、また、非常に良好である結果アレイ


ブール要素であります

可読性の面では、bool()map()が適しています。速度の面では、彼らが早く約半分です:

のPython 3.5.2(repl.it)の場合:ただし少しだけ速く

より

[not not x for x in lst]

は、他の3つのオプションよりも高速ですPythonの2.7.10用

[x==1 for x in lst]

repl.it):

x==1エッジアウトnot notですが、両方ともまだ他の2倍の2倍の速さです。


not not、それはすべての値に適用されるという点でも、あなたが実際にあなたのため、解決しようとしているものがある、これはXYの問題のように思える、01

関連する問題