类型错误:列表索引必须是整数或切片而不是元组
TypeError: list indices must be integers or slices not tuple
Python“TypeError: list indices must be integers or slice, not tuple”发生在我们在访问索引处的列表时在方括号之间传递元组时。
要解决该错误,请确保用逗号分隔嵌套列表元素并更正索引访问器。
忘记用逗号分隔列表的元素
这是错误如何发生的一个示例。
# ⛔️ TypeError: list indices must be integers or slices, not tuple my_list = [['a', 'b']['c', 'd']] # 👈️ forgot comma between elements
我们忘记用逗号分隔二维列表中的项目。
要解决该错误,请在列表的元素之间添加一个逗号。
# ✅ works my_list = [['a', 'b'], ['c', 'd']]
列表中的所有元素必须用逗号分隔。
使用不正确的索引访问器
如果您使用不正确的索引访问器,您也可能会遇到错误。
my_list = [['a', 'b'], ['c', 'd']] # ⛔️ TypeError: list indices must be integers or slices, not tuple result = my_list[0, 0]
my_list[2]
)或切片(例如)作为列表索引。 my_list[0:2]
my_list = ['a', 'b', 'c', 'd'] print(my_list[2]) # 👉️ 'c' print(my_list[1:3]) # 👉️ ['b', 'c']
访问嵌套列表中的特定元素
如果需要从二维列表中获取值,请使用方括号访问嵌套列表,然后再次使用方括号访问特定元素。
my_list = [['a', 'b'], ['c', 'd']] print(my_list[0][0]) # 👉️ 'a' print(my_list[0][1]) # 👉️ 'b'
我们使用第一0
组方括号访问第一个列表 (index),然后访问指定索引处的嵌套列表。
Python 索引是从零开始的,因此列表中的第一项的索引为0
,最后一项的索引为-1
或len(a_list) - 1
。
获取列表的一部分
如果您需要获取列表的一部分,请使用冒号分隔开始和结束索引。
my_list = ['a', 'b', 'c', 'd', 'e'] print(my_list[0:3]) # 👉️ ['a', 'b', 'c'] print(my_list[3:]) # 👉️ ['d', 'e']
列表切片的语法是
a_list[start:stop:step]
.
索引start
是包含的,stop
索引是排他的(最多,但不包括)。
如果start
省略索引,则认为是0
,如果stop
省略索引,则切片转到列表的末尾。
访问多个不连续的列表项
如果您需要
访问多个不连续的列表项,请分别访问它们。
my_list = ['a', 'b', 'c', 'd', 'e'] first = my_list[0] print(first) # 👉️ 'a' second = my_list[1] print(second) # 👉️ 'b'
将 Python 列表转换为numpy
数组
如果您使用numpy
并试图访问具有两个索引的嵌套列表,请确保numpy
先将列表转换为数组。
import numpy as np my_list = [['a', 'b'], ['c', 'd'], ['e', 'f']] arr = np.array(my_list) result = arr[:, 0] print(result) # 👉️ ['a', 'c', 'e'] print(arr[0, 1]) # 👉️ b print(arr[1, 1]) # 👉️ d print(arr[2, 1]) # 👉️ f
我们使用该numpy.array()
方法将列表转换为numpy
数组。
第一个示例显示如何从数组中的每个嵌套列表中获取第一项。
如果使用numpy
,则可以numpy
直接访问多个索引处的数组。
import numpy as np arr = np.array(['bobby', 'hadz', 'com', 'a', 'b', 'c']) indices = [0, 2, 4] new_list = list(arr[indices]) print(new_list) # 👉️ ['bobby', 'com', 'b']
我们使用
numpy.array
方法创建一个 numpy 数组并直接在多个索引处访问它。
如果您需要安装 NumPy,请从您的终端运行以下命令。
pip install numpy # 👇️ or pip3 pip3 install numpy
遍历列表
如果需要遍历列表,请使用for
循环。
list_of_dicts = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby'}, {'id': 3, 'name': 'Carl'}, ] for item in list_of_dicts: print(item['id']) print(f'Name: {item["name"]}')
该示例遍历字典列表。
如果在循环时需要访问当前迭代的索引,请使用该
enumerate()
方法。
my_list = ['bobby', 'hadz', 'com'] for index, item in enumerate(my_list): print(index, item) # 👉️ 0 bobby, 1 hadz, 2 com
enumerate函数接受一个可迭代对象并返回一个包含元组的枚举对象,其中第一个元素是索引,第二个元素是相应的项目。
错误地将变量重新分配给元组
确保您没有错误地将元组分配给变量。
my_list = ['a', 'b', 'c', 'd', 'e'] my_tuple = 0, 1 # ⛔️ TypeError: list indices must be integers or slices, not tuple result = my_list[my_tuple]
万一你错误地声明了一个元组,元组有多种构造方式:
- 使用一对括号
()
创建一个空元组 - 使用尾随逗号 –
a,
或(a,)
- 用逗号分隔项目 –
a, b
或(a, b)
- 使用
tuple()
构造函数
如果您不确定变量存储的对象类型,请使用类type()
。
my_list = ['a', 'b', 'c', 'd', 'e'] print(type(my_list)) # 👉️ <class 'list'> print(isinstance(my_list, list)) # 👉️ True my_tuple = 0, 1 print(type(my_tuple)) # 👉️ <class 'tuple'> print(isinstance(my_tuple, tuple)) # 👉️ True
类型
类
返回对象的类型。
如果传入的对象是传入类的实例或子类,则isinstance函数返回
。True