【问题标题】:What is type object is not subscriptable?什么是类型对象不可下标?
【发布时间】:2021-04-12 19:25:30
【问题描述】:

我自学python,非常像一个初学者。这是给我的一个问题,看看是否可以解决它。将一个数字列表与一个整数进行比较,如果列表中的最后一个数字高于唯一的整数,它应该返回字符串“Higher”,如果它更小,则返回“Smaller”。它应该返回列表中的第一个整数。这是我到目前为止的代码。我是为了交互,这意味着它将查看列表,对吗?我理解条件:if,else,然后第一个索引位置是O。但是“类型对象不可下标”是什么意思?

def problem1(aList, number):
    for i in aList:
        if i in range [aList] > number:
            return ("Larger")
        if i in range [aList] < number:
            return ("Smaller")
        else:
            return aList[0]

【问题讨论】:

  • range 是一个类型,就像intstrlist 等一样。要构造范围对象,您必须调用范围构造函数 ,例如range(10)。你期望rang[aList]做什么?目前尚不清楚,但这就是导致错误的原因。
  • if i in range [aList] &gt; number 没有任何意义。你能用英语解释一下你试图在那里执行什么操作吗?

标签: python


【解决方案1】:

type object not subscriptable 诚然,有点神秘。 var[key] 并且可用于实现 __getitem__ 方法的每个对象。这样做的内置类型是字典(Python 中的dict)。 builtin range 不是字典,而是类型,类型不实现该方法。您收到的错误基本上意味着“对不起,但我找不到这种类型的 getitem 方法”。事实上,你甚至不需要 range() 和 for 循环来完成你的任务。只需使用可迭代索引。要获取可迭代的最后一项,请为第一个元素写入 -1 而不是 0。而且您不需要将返回值包装在括号中:

def problem1(aList, number):
    if aList[-1] > number:
        return "Larger"
    elif aList[-1] < number:
            return "Smaller"
    else:
        return aList[0]

【讨论】:

  • 这个错误有什么神秘之处?您正在尝试对不可下标的对象进行切片,在这种情况下,它是一种类型 (range)...
  • @Tomerikoo 我的意思是对于 python 初学者来说它很神秘,当然不适合我......
猜你喜欢
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2023-04-10
  • 2015-11-20
相关资源
最近更新 更多