我有一个名为all_data_array
的大数组:
all_data_array = [[[], [], [], [], [], [], [], [], [], []], [[0, 1, 2, 3], ['foo', 'moo', 'bar', 'sis'], ['05-03-2014', '10-03-2014', '14-03-2014', '20-03-2014'], ['05-03-2014', '10-03-2014', '14-03-2014', '20-03-2014'], ['12:00', '12:03', '12:01', '12:01'], ['12:05', '12:08', '12:06', '12:06'], [123, 322, 345, 0], [1, 1, 1, 0], [1, 0, 1, 0], [0.1149597018957138, 0.920006513595581, 1.0062587261199951, 1.0062587261199951]]]
在这个例子中,all_data_array
里面有两个数组:
1.“空”的:[[], [], [], [], [], [], [], [], [], []]
2.填充的(很长)[[0, 1, 2, 3], ['foo', 'moo', 'bar', 'sis'], ['05-03-2014', '10-03-2014', '14-03-2014', '20-03-2014'], ['05-03-2014', '10-03-2014', '14-03-2014', '20-03-2014'], ['12:00', '12:03', '12:01', '12:01'], ['12:05', '12:08', '12:06', '12:06'], [123, 322, 345, 0], [1, 1, 1, 0], [1, 0, 1, 0], [0.1149597018957138, 0.920006513595581, 1.0062587261199951, 1.0062587261199951]]
如何从all_data_array
删除所有空数组?该示例的解决方案仅为all_data_array.pop[0]
,但如果可能,我希望有一个通用的解决方案
我试过这样的事情,但它不起作用,我有点失落:
for i in all_data_array:
for m in xrange(len(all_data_array)):
if m == []:
print "EMPTY"
else:
print "WITH CONTENT"
先谢谢
答案 0 :(得分:3)
使用all
:
not_empty_ones = []
for el in all_data_array:
if all(el):
not_empty_ones.append(el)
print not_empty_ones
由于这是一个由列表本身组成的列表,因此您需要检查内部的每个元素是否为空。这可以通过all built-in获得。
答案 1 :(得分:1)
all_data_array_no_empty = [x for x in all_data_array if all(x)]
答案 2 :(得分:0)
尽管空数组/列表的长度如此,它仍会这样做:
from itertools import chain
[array for array in all_data_array if len(list(chain.from_iterable(array))) > 0]
如果您的列表非空,如果您使用all
而不是len(list(chain.from_iterable(array))) > 0
,则会得到不同的结果:
>>> all_data_array = [[[0], []], [[1, 1, 1]]]
>>> [l for l in all_data_array if len(list(chain.from_iterable(l))) > 0]
[[[0], []], [[1, 1, 1]]] # <-- element [[0], []] will be included
>>> [el for el in all_data_array if all(el)]
[[[1, 1, 1]]] # <-- element [[0], []] will be excluded