在python中,假设我有一个列表:
l = [ 'True', 'False', 'myname', 1, 0, 'foo' ]
我希望将字符串 'True'
或'False'
转换为1
或0
,这样做的最佳方式是什么?仍然保留该值最初的索引?即输出看起来像:
l = [ 1, 0, 'myname', 1, 0, 'foo' ]
答案 0 :(得分:2)
列表理解是你的朋友:
>>> l = [ 'True', 'False', 'myname', 1, 0, 'foo']
>>> mapping = {"True": 1, "False": 0}
>>> [mapping.get(x, x) for x in l]
答案 1 :(得分: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']
>>>
答案 2 :(得分:0)
如果您的列表项目为on
,off
,yes
,no
等,我会提供更强大的解决方案(指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']
答案 3 :(得分:0)
您可以使用for循环
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)