【问题标题】:Python map function strange behavior [duplicate]Python映射函数奇怪的行为[重复]
【发布时间】:2018-05-29 12:17:37
【问题描述】:

我正在运行以下代码:

selectedvalidations='1,2,3,4,5,6,7'
x=map(int,selectedvalidations.split(','))
print(list(x))

打印出来:

[1, 2, 3, 4, 5, 6, 7]

如果我再次打印:

print(list(x))

打印出来:

[]

为什么?

【问题讨论】:

  • 在python3中map是一个生成器
  • 因为 map 是生成器,所以你从这个生成器中提取所有内容并且它是空的,尝试new_x = list(x)print(new_x) 你想要多少次
  • 在这种情况下,最明确的做法是避免使用 map 并使用列表推导式。

标签: python dictionary


【解决方案1】:

正确的做法是将生成器原地转换为列表并将列表保存在变量中

>>> selectedvalidations='1,2,3,4,5,6,7'
>>> x=list(map(int,selectedvalidations.split(',')))
>>> x
[1, 2, 3, 4, 5, 6, 7]
>>> x
[1, 2, 3, 4, 5, 6, 7]
>>> 

【讨论】:

    【解决方案2】:

    在 python3 中,map 是一个生成器。如果你想重用变量使用

    selectedvalidations='1,2,3,4,5,6,7'
    x=list(map(int,selectedvalidations.split(',')))  #Encapsulate map in list
    print(x)
    

    【讨论】:

    • 为什么要使用两次list()
    • 抱歉没看到。谢谢
    • 谢谢!在 Python 2.7 中,行为有所不同,即我可以多次使用“x”映射对象而不会出现问题。
    • 你是对的,在 python2 中 map 返回一个列表,所以你可以使用任意次数。
    • @MauroAssis。如果它解决了您的问题,请接受。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2014-04-19
    • 2017-01-14
    • 1970-01-01
    • 2020-03-26
    • 2016-01-26
    • 2014-03-08
    相关资源
    最近更新 更多