如何将元素列表转换为0或1的列表

时间:2014-05-11 23:31:15

标签: python

我有一个列表,其元素是json对象或None。将它转换为0和1的列表最优雅的方法是什么。例如,这是我的输入:

mylist = [j1, j2, None, j3, None]

j1,j2,j3是json对象。预期的输出是

output_list = [1, 1, 0, 1, 0]

我可以使用for循环后跟if语句来实现它。有没有办法做到更优雅/ pythonic?

2 个答案:

答案 0 :(得分:5)

您可以使用list comprehensionconditional expression

mylist[:] = [0 if x is None else 1 for x in mylist]

参见下面的演示:

>>> mylist = ['a', 'b', None, 'c', None]
>>> mylist[:] = [0 if x is None else 1 for x in mylist]
>>> mylist
[1, 1, 0, 1, 0]
>>>

[:]将使列表对象保持不变:

>>> mylist = ['a', 'b', None, 'c', None]
>>> id(mylist)
34321512
>>> mylist[:] = [0 if x is None else 1 for x in mylist]
>>> id(mylist)
34321512
>>>

答案 1 :(得分:1)

您还可以在列表中使用map功能,这里是python shell的会话:

>>> l = ['j1', 'j2', None, 'j3', None]
>>> map(lambda e : e is None, l)
[False, False, True, False, True]
>>> map(lambda e : e is not None, l)
[True, True, False, True, False]
>>> map(lambda e : int(e is not None), l)
[1, 1, 0, 1, 0]