【问题标题】:Best way to deal with 'map' object is not subscriptable [duplicate]处理“地图”对象的最佳方法是不可下标的[重复]
【发布时间】:2020-11-02 22:38:10
【问题描述】:

我有一段代码可以做到这一点:

def number(self, width = None):

        if not self.v:
            return None

        if not width:
            width = len(self.v)

        return self.VERSION_DELIMITER.join(map(str, self.v[:width]))

我最近改用 Python 3 而不是 2。当我这样做时,我开始收到错误:

TypeError: 'map' object is not subscriptable:

在 Python 3 中进行这项工作的最佳方法是什么?

【问题讨论】:

  • 您能否分享self.vwidth 的值的示例以及您期望获得这些值的输出?
  • 请编辑您的问题以包含minimal reproducible example

标签: python python-3.x


【解决方案1】:

self.v 是一个地图对象,在 Python 3 中不可下标。最简单的解决方法是在切片之前将其放入列表:

map(str, list(self.v)[:width])

根据其他类实现,最好将.v 显式存储为列表

【讨论】:

  • 另一种方法是使用islice:添加from itertools import islice这一行,然后就可以使用map(str, islice(self.v, width))。这不会构造两个临时列表。
  • @Jasmijn 这绝对是一个更好的方法,不敢相信我不知道这个功能。您介意将其发布为答案(我将删除我的)吗?
  • @Marat 这是有道理的!谢谢
  • 这行不通。 list(self.v) 将在第一次通过时耗尽 map 对象,因此下次它将为空。您最好立即将其保存为列表。我链接到的骗子有不同的选择。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 2020-09-12
  • 2011-06-05
  • 2020-09-14
  • 1970-01-01
  • 2012-09-12
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多