解决Python TypeError: 'set' 对象不可下标

745 阅读1分钟

最小的错误示例

给出以下最小的例子,你创建了一个集合,并试图使用索引切片来访问这个集合的一个元素。

my_set = {1, 2, 3}
my_set[0]

如果你运行这个代码片段,Python 会引发TypeError: 'set' object is not subscriptable

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 2, in <module>
    my_set[0]
TypeError: 'set' object is not subscriptable

为什么会出现这个错误?

如果你试图使用索引或切片来访问一个集合的一个元素,这意味着该集合的排序,那么 PythonTypeError: 'set' object is not subscriptable 就会发生。

然而,集合是 唯一元素的无序集合:它们没有元素的排序。因此,你不能使用切片或索引,这些操作只可能在一个有序的类型上进行。

如何修复这个错误?

如何修复TypeError: 'set' object is not subscriptable

要修复TypeError: 'set' object is not subscriptable ,要么在访问无序集合之前将其转换为有序列表元组,要么完全摆脱索引或切分调用。

这里有一个例子,你首先无序集合转换为有序列表。然后才使用索引或切分,这样错误就不会再发生了。

my_set = {1, 2, 3}

# Convert set to list:
my_list = list(my_set)

# Indexing:
print(my_list[0])
# 1

# Slicing:
print(my_list[:-1])
# [1, 2]

另外,你也可以集合转换为元组来避免TypeError: 'set' object is not subscriptable

my_tuple = tuple(my_set)