就地更新列表,将'True'/'False'元素转换为1/0

时间:2016-09-19 22:27:11

标签: python list dictionary

在python中,假设我有一个列表:

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

我希望将字符串 'True''False'转换为10,这样做的最佳方式是什么?仍然保留该值最初的索引?即输出看起来像:

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

4 个答案:

答案 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)

如果您的列表项目为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']

答案 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)