如何从数组Python中删除0

时间:2018-11-02 16:22:11

标签: python arrays

我有一个数组数组,我想删除所有为零的值。 我有这个

M_data = [
    [0.0, 0.0, 0.0, 0.0, 0.0],
    [19, 0.0, 0.0, 0.0, 0.0],
    [27, 31, 0.0, 0.0, 0.0],
    [8, 18, 26, 0.0, 0.0],
    [33, 36, 41, 31, 0.0],
    [18, 1, 32, 17, 35]
    ]

我想删除所有零,所以我得到

M_data = [
    [],
    [19],
    [27, 31],
    [8, 18, 26],
    [33, 36, 41, 31],
    [18, 1, 32, 17, 35]
    ]

我该怎么做? (python)

4 个答案:

答案 0 :(得分:3)

您可以使用list comprehension

M_data = [
    [0.0, 0.0, 0.0, 0.0, 0.0],
    [19, 0.0, 0.0, 0.0, 0.0],
    [27, 31, 0.0, 0.0, 0.0],
    [8, 18, 26, 0.0, 0.0],
    [33, 36, 41, 31, 0.0],
    [18, 1, 32, 17, 35]
    ]

result = [[e for e in lst if e] for lst in M_data]
print(result)

输出

[[], [19], [27, 31], [8, 18, 26], [33, 36, 41, 31], [18, 1, 32, 17, 35]]

以上等同于

result = []
for lst in M_data:
    inner = []
    for e in lst:
        if e:
            inner.append(e)
    result.append(inner)

该想法是遍历内部列表并创建仅包含0不同元素的新列表。要检查0以外的值,可以直接使用该值,Python 0中的if语句为False。例如,当if e是数字时,if e != 0等效于e

答案 1 :(得分:0)

您还可以在M_data中的每个列表上使用filter

filtered = [list(filter(lambda x: x != 0, l)) for l in M_data]
print(filtered)
# [[], [19], [27, 31], [8, 18, 26], [33, 36, 41, 31], [18, 1, 32, 17, 35]]

答案 2 :(得分:0)

您还可以使用filter将所有None(0)值过滤为

lst = [list(filter(None, lst)) for lst in M_data]

输出

[[], [19], [27, 31], [8, 18, 26], [33, 36, 41, 31], [18, 1, 32, 17, 35]]

list会将filter命令的输出转换回列表,因为您也想要一个空列表。您遍历M_data的子列表,然后滤除0。这一条班轮也称为列表理解

答案 3 :(得分:0)

您可以轻松过滤列表:

M_data = [
    [0.0, 0.0, 0.0, 0.0, 0.0],
    [19, 0.0, 0.0, 0.0, 0.0],
    [27, 31, 0.0, 0.0, 0.0],
    [8, 18, 26, 0.0, 0.0],
    [33, 36, 41, 31, 0.0],
    [18, 1, 32, 17, 35]
    ]
M_data = [[x for x in y if x != 0] for y in L]
M_data

enter image description here