代码之家  ›  专栏  ›  技术社区  ›  user5054

列出有效且非空的zip对象将打印空列表

  •  0
  • user5054  · 技术社区  · 7 年前

    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对象中重现此行为。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Reut Sharabani    7 年前

    如果你在Python3上, 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 :

    生成一个迭代器来聚合每个iterable中的元素。 返回元组的迭代器,其中第i个元组包含每个参数序列或iterable中的第i个元素。

    推荐文章