我有一个非常大的数据集,其中包含嵌套列表。这是我的数据集的一个小示例(结构与此完全相同):
[[['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。
最佳答案
最可能的原因是您的大数据集中有空列表,如以下示例所示:
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')]]
关于python - 在python中使用zip函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27694229/