2016-09-19 4 views
1

に「真」/「偽」の要素を変換:更新リスト、私がリストを持っているはず、Pythonで1/0

l = [ 'True', 'False', 'myname', 1, 0, 'foo' ] 

と私は文字列'True'または'False'を変換したいです1または0にするには、これを実行し、値がもともと持っていたインデックスを保持する最良の方法は何ですか?リストの内包表記はあなたの友達です

l = [ 1, 0, 'myname', 1, 0, 'foo' ] 
+1

あなたは真、偽の文字列 'TRUE'、 '偽' はブールもしかしてforループを使用することができますか? – smci

答えて

2

>>> l = [ 'True', 'False', 'myname', 1, 0, 'foo'] 
>>> mapping = {"True": 1, "False": 0} 
>>> [mapping.get(x, x) for x in l] 
+0

'mapping = {" True ":1、" False ":0} .get'で一歩進んだりできます。 –

1
>>> replace = {'True':1, 'False':0} 
>>> my_list = [ 'True', 'False', 'myname', 1, 0, 'foo' ] 
>>> [replace.get(e,e) for e in my_list] 
[1, 0, 'myname', 1, 0, 'foo'] 
>>> 
0

思想リストの項目はonoffyesnoある場合、私は、より堅牢なソリューションを提供するであろうように、すなわち出力が見えます(documentationを参照してください)。

from distutils.util import strtobool 
def convert_str_to_bool(l): 
    result = [] 
    for item in l: 
     try: 
      result.append(strtobool(item)) 
     except: 
      result.append(item) 
    return result 

サンプル出力:

>>> l = [ 'True', 'False', 'myname', 1, 0, 'foo' ] 
>>> print convert_str_to_bool(l) 
[1, 0, 'myname', 1, 0, 'foo'] 
0

あなたは

for i in l: 

    if i == 'True': 

     a = l.index(i) 

     b = l.remove(i) 

     l.insert(a, 1) 

    elif i == 'False': 

     a = l.index(i) 

     b = l.remove(i) 

     l.insert(a, 0) 

print(l) 
関連する問題