python3 内循环中遍历map,遍历一遍后再次进入内循环,map为空

 

今天在使用python map的过程中,发现了一个奇怪问题,map遍历完成后,再次访问map,发现map为空了,特记录下来,以备日后查看。

如下代码,期望的结果是每次从外循环进入内循环,map都从头开始进行遍历,但事实却不是这样,下面为代码:

    outData = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
    outDataMap = map(set, outData)
    data = [[1],[2],[3],[4],[5]]
    dataMap = map(set, data)
    for outElem in outDataMap:
        print('outElem:', outElem)
        for innElem in dataMap:
            print('innElem:', innElem)

 
实际执行结果是:
outElem: {1, 3, 4}
    innElem: {1}
    innElem: {2}
    innElem: {3}
outElem: {2, 3, 5}
outElem: {1, 2, 3, 5}
期望结果是:
outElem: {1, 3, 4}
    innElem: {1}
    innElem: {2}
    innElem: {3}
outElem: {2, 3, 5}
    innElem: {1}
    innElem: {2}
    innElem: {3}
outElem: {1, 2, 3, 5}
    innElem: {1}
    innElem: {2}
    innElem: {3}
 

产生这种差异的原因在于:遍历完最后一个元素后,再次访问时会放回空列表

为了能持续正确的访问数据,需要将map list comprehension之后存在另外一个变量中。

正确代码如下:

    outData = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5]]
    outDataMap = map(set, outData)
    data = [[1],[2],[3]]
    dataMap = map(set, data)
    dataList = list(dataMap)
    for outElem in outDataMap:
        print('outElem:', outElem)
        for innElem in dataList:
            print('    innElem:', innElem)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值