python使用list comprehensions或其他东西替换列表中的空白?

python replace None with blank in list using list Comprehensions or something else? Also a nested list solution

本问题已经有最佳答案,请猛点这里访问。

a = [None, None, '2014-04-27 17:31:17', None, None]

试图用''取代None

试了很多次,这是我最近的一次。b= ['' for x in a if x==None]给了我四个''但没有注明日期

我原以为是b= ['' for x in a if x==None else x],但没用。

如果它是这样嵌套的:

埃多克斯1〔6〕

你还能用列表理解吗?


只需按以下方式修改代码:

1
2
3
4
b = ['' if x is None else x for x in a]    #and use is None instead of == None

>>> print b
['', '', '2014-04-27 17:31:17', '', '']

解释

对于嵌套列表,可以执行以下操作:

1
b = [['' if x is None else x for x in c] for c in a]


您可以使用or运算符进行以下操作:

1
2
3
>>> a = [None, None, '2014-04-27 17:31:17', None, None]
>>> print [x or"" for x in a]
['', '', '2014-04-27 17:31:17', '', '']

…因为or操作符的工作方式是这样的:

1
2
3
4
>>> None or""
''
>>>"blah" or""
'blah'

…尽管这可能不理想,因为它将取代任何错误的值,例如:

1
2
>>> 0 or""
''

如果这是您的问题,那么sshashank124的回答中提到的更明确的['' if x is None else x for x in a],它将专门取代None


你甚至不用理解:

a = map(lambda x: '' if x == None else x, a)


如果事先知道列表嵌套的深度(尽管它不太可读),则可以使用理解,对于任意嵌套列表,可以使用如下简单的"递归映射"函数:

1
2
3
4
def maprec(obj, fun):
    if isinstance(obj, list):
        return [maprec(x, fun) for x in obj]
    return fun(obj)

用途:

1
new_list = maprec(nested_list, lambda x: '' if x is None else x)