我有一个列表,其元素是json对象或None。将它转换为0和1的列表最优雅的方法是什么。例如,这是我的输入:
mylist = [j1, j2, None, j3, None]
j1,j2,j3是json对象。预期的输出是
output_list = [1, 1, 0, 1, 0]
我可以使用for循环后跟if语句来实现它。有没有办法做到更优雅/ pythonic?
答案 0 :(得分:5)
您可以使用list comprehension和conditional 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]