【问题标题】:error when using zip function in python在python中使用zip函数时出错
【发布时间】:2015-02-25 22:56:16
【问题描述】:

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

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

【问题讨论】:

  • 考虑展示一个“大数据集”,以便人们重现您的问题。
  • 实际上结构与示例类似,但父列表中有 111559 个列表。这是你需要的吗?
  • @ali 你能显示输入中的空列表在哪里吗?是像[['Trans', 'TTP'], [], ['name', 'EHGT']] 还是更像[['Trans', 'TTP'], ['name', 'EHGT']], [], [['Trans', 'GFT'], ['name', 'EGSB']]
  • 是这样的:[[['Trans', 'TTP'], ['name', 'EHGT'], []], [['Trans', 'GFT'], ['名称', 'EGSB'], []]]

标签: python list python-2.6


【解决方案1】:

最可能的原因是您的大数据集中有空列表,如下例所示:

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

【讨论】:

  • @mehtunguh:不难概括:输入中的“很多”空列表很容易导致输出中出现“很多”空列表。
  • @mehtunguh 完全正确。你知道该怎么做才能删除它们
  • 但它只提供空列表
  • 抱歉,尝试编辑时删除了我的评论。我正在了解 OP 在每个子列表中是否有多个空列表,或者在顶层有多个空列表。
猜你喜欢
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
相关资源
最近更新 更多