TypeError: ‘set’ 对象在 Python 中不可订阅

TypeError: ‘set’ 对象在 Python 中不可下标

TypeError: ‘set’ object is not subscriptable in Python

Python“TypeError: ‘set’ object is not subscriptable in Python”发生在我们尝试访问set特定索引处的对象时,例如my_set[0].

要解决该错误,请使用方括号声明列表,因为set
对象是无序且不可订阅的。

类型错误设置对象不可订阅

下面是错误如何发生的示例。

主程序
# 👉️ if you meant to use list, do: my_list = ['a', 'b', 'c'] my_set = {'a', 'b', 'c'} # ⛔️ TypeError: 'set' object is not subscriptable print(my_set[0])

请注意,我们使用了大括号,因此我们声明了一个set对象。

Set 对象是唯一元素的无序集合,因此它们不支持索引和切片。

将集合转换为列表以在索引处访问它

您可以将set对象传递给list()
构造函数以将 a 转换
set为列表。

主程序
my_set = {'a', 'b', 'c'} my_list = list(my_set) print(my_list) # 👉️ ['a', 'c', 'b'] print(my_list[0]) # 👉️ 'a'

然而,由于集合
对象是无序的,多次运行相同的代码会产生一个包含相同元素但顺序不同的列表。

您还可以将 转换set为元组以访问索引处的元素。

主程序
my_set = {'a', 'b', 'c'} my_list = tuple(my_set) print(my_list) # 👉️ ('a', 'b', 'c') print(my_list[0]) # 👉️ 'a'

元组与列表非常相似,但实现的内置方法较少并且是不可变的(无法更改)。

使用方括号来声明一个列表而不是一个set

set或者,您可以使用方括号而不是花括号来声明列表而不是对象。

主程序
my_list = ['a', 'b', 'c'] print(my_list[0]) # 👉️ a print(my_list[1]) # 👉️ b
请注意,我们使用方括号来声明一个列表,使用花括号和逗号分隔的元素来声明一个set.

使用括号来声明一个元组而不是一个set

元组使用括号声明。

主程序
my_tuple = ('a', 'b', 'c') print(my_tuple[0]) # 👉️ a print(my_tuple[1]) # 👉️ b

请注意,元组是不可变的。如果您需要保留顺序的可变数据结构,请使用列表。

使用in运算符检查一个值是否在set

您可以使用in运算符检查 a 是否set包含特定值,或者您可以迭代 a set

主程序
my_set = {'a', 'b', 'c'} print('a' in my_set) # 👉️ True for el in my_set: print(el) my_set.add('d') my_set.remove('b') print(my_set) # 👉️ {'d', 'a', 'c'}

如果您打算声明一个包含键值对的字典,请使用以下语法。

主程序
my_dict = {'name': 'Alice', 'age': 30} print(my_dict['name']) # 👉️ "Alice" print(my_dict['age']) # 👉️ 30

请注意,我们在声明字典时用冒号分隔键和值。

访问索引不存在的列表会导致错误

Note that if you try to access a list index that is out of bounds, you would get
an error. You can use a
try/except statement if
you need to handle that.

main.py
my_set = {'a', 'b', 'c'} my_list = list(my_set) try: print(my_list[100]) except IndexError: print('index out of bounds') # 👉️ this runs

The example catches the IndexError that is thrown if the index is out of
bounds.

The “TypeError: object is not subscriptable” means that we are using square brackets to either access a key in a specific object or to access a specific index, however, the object doesn’t support this functionality.

Set objects are unordered and are therefore not subscriptable. To solve the
error, we have to use a list or a dictionary instead of a set or remove the
square brackets that try to access an index or a key in the set.

You should only use square brackets to access subscriptable objects.

The subscriptable objects in Python are:

  • list
  • tuple
  • dictionary
  • string

All other objects have to be converted to a subscriptable object by using the
list(), tuple(),
dict() or
str() classes to be able to use bracket
notation.

Subscriptable objects implement the __getitem__ method whereas
non-subscriptable objects do not.

main.py
a_list = [1, 2, 3] # 👇️ <built-in method __getitem__ of list object at 0x7f71f3252640> print(a_list.__getitem__)

# Additional Resources

You can learn more about the related topics by checking out the following
tutorials: