• python中的zip元素在访问后会被自动删除吗?


    今天遇到一个很有趣的问题,关于python中zip的特性:

    代码片段1:
    lowerCase=['a','b','c']
    upperCase=['A','B','B']
    
    zipped=zip(lowerCase,upperCase)
    dict1=dict(zipped)
    print('Dict: ', dict1)
    
    # 从输看,目前一切正常
    # Dict:  {'a': 'A', 'b': 'B', 'c': 'B'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    代码片段2:

    在创建dict1之前,先访问zipped一次

    lowerCase=['a','b','c']
    upperCase=['A','B','B']
    
    zipped=zip(lowerCase,upperCase)
    print([x for x in zipped]) #在创建dict1之前对zipped访问一次
    dict1=dict(zipped)
    print('Dict: ', dict1)
    
    # 怪了,dict1变成了空字典
    # [('a', 'A'), ('b', 'B'), ('c', 'B')]
    # Dict:  {}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    我们直到zip函数的返回值,在python2中是list类型,在python3中是zip类型,在python3中用

    print(type(zipped))
    
    • 1

    也可以证实这一点。

    代码片段3:

    接下来我们修改zipped的创建方式,在生成时就直接转为数组

    lowerCase=['a','b','c']
    upperCase=['A','B','B']
    
    zipped=list(zip(lowerCase,upperCase)) #直接转成list
    print([x for x in zipped]) # 无论加不加这一行,结果都一致了
    dict1=dict(zipped)
    print('Dict: ', dict1)
    
    # 恢复正常了
    # Dict:  {'a': 'A', 'b': 'B', 'c': 'B'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    代码片段4:

    我们再进一步,在代码片段2的基础上,再访问zipped一次看看会发生什么

    lowerCase=['a','b','c']
    upperCase=['A','B','B']
    
    zipped=zip(lowerCase,upperCase)
    print([x for x in zipped])
    print([x for x in zipped])
    
    # [('a', 'A'), ('b', 'B'), ('c', 'B')]
    # []
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    哇哦!zip类型被访问后,元素真的没了!!!

    总结和求助

    经验教训就是:使用zip要谨慎,最好在使用zip函数时,直接把它转成我们熟悉的list。
    我没有查到关于zip在被访问后元素自动删除的相关说明,恳请知道详情筒子们与我分享。先行谢过了!

  • 相关阅读:
    瑞吉外卖(五) 全局异常处理
    强化学习:价值迭代求解迷宫寻路问题
    PCL入门(四):octree简单使用
    Android原生实现控件圆角方案(API28及以上)
    Dockerfile的概述和构建
    工业自动化编程与数字图像处理技术
    【 C++ 】list的常用接口说明
    干货 | 深度多元时序模型在携程关键指标预测场景下的探索应用
    Android基础面试题
    PostgreSQL 与 Oracle 访问分区表执行计划差异
  • 原文地址:https://blog.csdn.net/fm0517/article/details/126914823