在python中使用zip函数时出错

时间:2014-12-29 18:42:01

标签: python list python-2.6

我有一个包含嵌套列表的非常大的数据集。这是我的数据集的一个小例子(结构与此完全相同):

[[['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。

1 个答案:

答案 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')]]