列出有效和非空的zip对象会打印空列表

时间:2019-05-17 20:08:57

标签: python list

zip_obj是一个包含17292个元组的zip对象。发生了一件奇怪的事情:

sorted_zip_obj = sorted(zip_obj, key=lambda x: -abs(x[1]))
print(f'{len(list(zip_obj))} {len(sorted_zip_obj)}')

打印0 17292。怎么会这样呢? 为什么打印的第一个数字是0而不是17292?

zip_obj是我从其他地方检索到的,很遗憾无法共享,并且无法在我手动创建的小型zip对象中重现此行为。

1 个答案:

答案 0 :(得分:1)

如果您使用的是python 3,zip_obj可能是一个懒惰的zip对象,您只能对其进行一次迭代。对它进行排序时,您已经筋疲力尽了。

尝试将其实现为这样的数据结构:

zip_obj = tuple(zip_obj) # you can use `list` if you prefer
sorted_zip_obj = sorted(zip_obj, key=lambda x: -abs(x[1]))
print(f'{len(zip_obj)} {len(sorted_zip_obj)}') # removed the redundant `list`

使用之前。

来自zip的文档:

  

制作一个迭代器,该迭代器汇总每个可迭代对象中的元素。   返回一个元组的迭代器,其中第i个元组包含每个参数序列或可迭代对象中的第i个元素。