Python从列表中删除空项

时间:2015-04-21 04:36:26

标签: python list filter null

我在DynamoBIM的python中创建了以下列表:

a = [["f", "o", "c"], [null, "o", null], [null, "o", null]]

我想从此列表中删除空项以创建此列表:

a = [["f", "o", "c"], ["o"], ["o"]]

我尝试了list.remove(x)filterfor - 循环以及其他一些方法,但似乎无法摆脱这些错误。

我该怎么做?

6 个答案:

答案 0 :(得分:6)

假设您将None表示为null,则可以使用列表推导:

>>> null = None
>>> nested_list = [["f", "o", "c"], [null, "o", null], [null, "o", null]]
>>> [[x for x in y if x] for y in nested_list]
[['f', 'o', 'c'], ['o'], ['o']]

如果null是某个其他值,您可以更改上面的内容以将null的值设置为其他值,并将理​​解改为:

>>> null = None # Replace with your other value
>>> [[x for x in y if x != null] for y in nested_list]
[['f', 'o', 'c'], ['o'], ['o']]

答案 1 :(得分:2)

a = [["f", "o", "c"], [None, "o", None], [None, "o", None]]
l = []
for i in a:
    l.append(filter(lambda x: x is not None, i))

print (l)

[['f', 'o', 'c'], ['o'], ['o']]

答案 2 :(得分:1)

实际上Null不在python中,它们应该是字符串

list_value = [["f", "o", "c"], ['null', "o", 'null'], ['null', "o", 'null']]

[filter(lambda x: x!='null' and x!=None, inner_list) for inner_list in list_value]

[['f', 'o', 'c'], ['o'], ['o']]

你也可以通过嵌套列表理解来解决:

[[for i in inner_list if i!='null' and not i] for inner_list in list_value]

答案 3 :(得分:1)

假设您的意思是None,您可以尝试使用filter()功能:

a = [["f", "o", "c"], [None, "o", None], [None, "o", None]]
print [filter(None,x) for x in a] 

>>> 
[['f', 'o', 'c'], ['o'], ['o']]

答案 4 :(得分:0)

您可以使用简单的列表理解:

>>> a = [["f", "o", "c"], [None, "o", null], [null, "o", None]]
>>> a = [[sub for sub in item if sub] for item in a]
>>> a
[['f', 'o', 'c'], ['o'], ['o']]
>>> 

这相当于:

a = [["f", "o", "c"], [None, "o", null], [null, "o", None]]
new = []
for item in a:
    _temp = []
    for sub in item:
        if sub:
            _temp.append(sub)
    new.append(_temp)

a = new

>>> a = [["f", "o", "c"], [None, "o", null], [null, "o", None]]
>>> new = []
>>> for item in a:
...     _temp = []
...     for sub in item:
...         if sub:
...             _temp.append(sub)
...     new.append(_temp)
... 
>>> a = new
>>> a
[['f', 'o', 'c'], ['o'], ['o']]
>>> 

答案 5 :(得分:0)

在Python中,“无”和NaN(“非数字”)之间有区别,有时通常称为“空”。 NaN的数据类型通常是浮点数。因此,如果您只处理一个字符串列表(如此处所示),则一种想法是使用列表推导来过滤字符串。

a = ["f", "o", "c", np.nan]
b = [c for c in a if type(c)==str]