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
对象传递给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.
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.
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.
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: