【问题标题】:Doing a map operation on the list class variable [closed]对列表类变量进行映射操作[关闭]
【发布时间】:2015-10-31 20:34:10
【问题描述】:

下面的代码返回错误:

class my_class:

def __init__(self):
    self.l = [(1,2),(3,4)]

def funct(self):
    self.l  = list(map(lambda x: x[0], l))
    print (l)

ob = my_class()
ob.funct()

TypeError: 'int' 对象不可下标

但是,如果要将逻辑与类分开 - 它会按预期工作

l = [(1,2),(3,4)]
l = list(map(lambda x: x[0], l))
print (l)

[1, 3]

谁能解释一下为什么对类变量执行相同的操作会导致上述错误?

附:我正在使用 python 3.4,虽然不认为这很重要

【问题讨论】:

  • 这是我的问题,我把实际代码搞砸了,这个问题对社区没有帮助。请删除它。谢谢

标签: python python-2.7 python-3.x ipython ipython-notebook


【解决方案1】:

如果您实际使用属性self.l,则代码有效:

    def funct(self):
        self.l  = list(map(lambda x: x[0], self.l))
        print(self.l)

输出:

[1, 3]

在某个地方你有一个单一的 int 或者在你定义的某个地方的 lself.l,如果 l 没有定义你会得到一个 `UnboundLocalError: local variable 'l' referenced before assignment。

根据您的评论,这是一个错字,那么您在 self.l 中有一个 int 而不仅仅是元组:

class my_class:
    def __init__(self):
        self.l = [3,(1,2),(3,4)]

    def funct(self):
        l  = list(map(lambda x: x[0],self.l))
        print(self.l)

然后运行示例:

In [2]: ob = my_class()

In [3]: ob.funct()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-e9ee341f0f31> in <module>()
----> 1 ob.funct()

<ipython-input-1-e1a6b2682f9f> in funct(self)
      4 
      5        def funct(self):
----> 6            l  = list(map(lambda x: x[0],self.l))
      7            print(self.l)

<ipython-input-1-e1a6b2682f9f> in <lambda>(x)
      4 
      5        def funct(self):
----> 6            l  = list(map(lambda x: x[0],self.l))
      7            print(self.l)

TypeError: 'int' object is not subscriptable

`

【讨论】:

  • 抱歉打错了。是的,您是对的 - 这可以与该更改一起使用,这意味着我的主要代码有问题。您能否删除您的答案,以便我可以删除我的问题?
  • @Dennis,如果是拼写错误,那么问题是您在 self.l 的某处有一个 int,而不仅仅是元组
  • 等一下,我会尝试在几秒钟内发布真实代码
  • Padraic,非常感谢您的帮助!!!!和你说的不太一样,但最终在我的代码中查看了一百次之后,我又查看了一遍,发现了该死的错误:) 感谢您的时间,祝您一切顺利
  • @Dennis,不用担心,如果你找到了解决方案,你可以回答你自己的问题,只需添加原始代码,这样才有意义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2012-06-19
  • 1970-01-01
  • 2012-06-08
  • 2011-11-21
相关资源
最近更新 更多