我有一个包含嵌套列表的非常大的数据集。这是我的数据集的一个小例子(结构与此完全相同):
[[['id', 'ENS001'], ['name', 'EGSB'], ['Trans', 'TTP']], [['id', 'EN02'], ['name', 'EHGT'], ['Trans', 'GFT']]]
我使用了这段代码:
z = [zip(*i) for i in l]
得到这样的东西:
[[('id', 'name', 'Trans'), ('ENS001', 'EGSB', 'TTP')], [('id', 'name', 'Trans'), ('EN02', 'EHGT', 'GFT')]]
对于像示例这样的小数据集,它可以很好地工作,但是当我将它用于我的大数据集时,它会提供许多空列表。我正在使用Python 2.6.6。
答案 0 :(得分:3)
最可能的原因是您的大数据集中有空列表,如以下示例所示:
In [11]: l = [[['id', 'ENS001'], ['name', 'EGSB'], ['Trans', 'TTP']], \
....: [['id', 'EN02'], ['name', 'EHGT'], []]]
↑↑ an empty list here...
In [12]: [zip(*i) for i in l]
Out[12]: [[('id', 'name', 'Trans'), ('ENS001', 'EGSB', 'TTP')], []]
↑↑ ...gives an empty
list here
发生这种情况是因为zip
在最短的迭代中用完了元素时停止了。
如果您希望过滤掉空列表,可以这样做:
In [15]: [zip(*filter(None, i)) for i in l]
Out[15]:
[[('id', 'name', 'Trans'), ('ENS001', 'EGSB', 'TTP')],
[('id', 'name'), ('EN02', 'EHGT')]]