我有一个数组数组,我想删除所有为零的值。 我有这个
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)
答案 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)