类型错误:列表索引必须是整数或切片而不是元组

类型错误:列表索引必须是整数或切片而不是元组

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,最后一项的索引为-1len(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