TypeError: ‘str’ 对象不支持项目分配

目录

TypeError: ‘str’ object does not support item assignment

  1. TypeError: ‘str’ 对象不支持项目分配
  2. TypeError: ‘int’ 对象不支持项目分配
  3. ‘numpy.float64’ 对象不支持项目分配

TypeError: ‘str’ 对象不支持项目分配

当我们尝试修改字符串中的字符时,会出现 Python“TypeError: ‘str’ object does not support item assignment”。

字符串在 Python 中是不可变的,因此我们必须将字符串转换为列表,替换列表项并将列表元素连接成字符串。

typeerror str 对象不支持项目分配

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

主程序
my_str = 'abc' # ⛔️ TypeError: 'str' object does not support item assignment my_str[0] = 'z'

我们试图更改导致错误的字符串的特定字符。

字符串是不可变的,因此不能就地更新字符串。

相反,我们必须创建一个新的、更新的字符串。

使用 str.replace() 获取更新后的新字符串

解决该错误的一种方法是使用 方法str.replace()获取新的、更新的字符串。

主程序
my_str = 'apple, banana, apple' new_str = my_str.replace('apple', 'melon') print(new_str) # 👉️ "melon, banana, melon"

str.replace方法返回字符串的副本,其中所有出现的子字符串都被提供的替换项替换

该方法采用以下参数:

姓名 描述
老的 字符串中我们要替换的子串
新的 每次出现的替换old
数数 count只替换第一次出现的(可选)
请注意,该方法不会更改原始字符串。字符串在 Python 中是不可变的。

默认情况下,该str.replace()方法会替换字符串中出现的所有子字符串。

如果您只需要替换第一个匹配项,请将count参数设置为
1.

主程序
my_str = 'apple, banana, apple' new_str = my_str.replace('apple', 'melon', 1) print(new_str) # 👉️ "melon, banana, apple"

将参数设置count1意味着仅替换第一次出现的子字符串。

将字符替换为列表的转换

替换字符串中特定索引处的字符的一种方法是:

  1. 将字符串转换为列表。
  2. 更新指定索引处的列表项。
  3. 将列表项连接成一个字符串。
主程序
my_str = 'abc' my_list = list(my_str) print(my_list) # 👉️ ['a', 'b', 'c'] my_list[0] = 'z' new_str = ''.join(my_list) print(new_str) # 👉️ 'zbc'

我们将字符串传递给list()类以获取包含字符串字符的列表。

列表是可变的,因此我们可以更改指定索引处的列表项。

最后一步是将列表项连接成一个带有空字符串分隔符的字符串。

str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联

Python 索引是从零开始的,因此字符串中的第一个字符的索引为0,最后一个字符的索引为-1or len(a_string) - 1

如果您必须经常这样做,请定义一个可重用的函数。

主程序
def update_str(string, index, new_char): a_list = list(string) a_list[index] = new_char return ''.join(a_list) new_str = update_str('abc', 0, 'Z') print(new_str) # 👉️ Zbc

update_str函数以一个字符串、索引和新字符作为参数,并返回一个新字符串,其中更新了指定索引处的字符。

另一种方法是使用
字符串切片

重新分配一个字符串变量

如果需要通过向其添加字符来重新分配字符串变量,请使用
+=运算符。

主程序
my_str = 'bobby' my_str += 'hadz' print(my_str) # 👉️ bobbyhadz

运算+=符是 的简写my_str = my_str + 'new'

该代码示例实现了与使用较长格式语法相同的结果。

主程序
my_str = 'bobby' my_str = my_str + 'hadz' print(my_str) # 👉️ bobbyhadz

使用字符串切片获取更新后的新字符串

这是一个用空格替换特定索引处的下划线的示例。

主程序
my_str = 'hello_world' idx = my_str.index('_') print(idx) # 👉️ 5 new_str = my_str[0:idx] + ' ' + my_str[idx+1:] print(new_str) # 👉️ "hello world"

我们需要的字符串的第一段是 up,但不包括我们要替换的字符。

字符串切片的语法是a_string[start:stop:step].

索引start是包含的,而stop索引是排他的(最多,但不包括)。

切片my_str[0:idx]从 index 开始0并上升到,但不包括
idx.

主程序
my_str = 'hello_world' print(my_str[0:5]) # 👉️ "hello"

下一步是使用加法运算+符添加替换字符串(在我们的例子中是一个空格)。

最后一步是连接字符串的其余部分。

请注意,我们从 slice 开始,index + 1因为我们想省略要替换的字符。

主程序
my_str = 'hello_world' print(my_str[5 + 1:]) # 👉️ "world"

我们没有在冒号后指定结束索引,因此切片会到达字符串的末尾。

我们只是构造一个新字符串,排除指定索引处的字符并提供替换字符串。

主程序
my_str = 'hello_world' idx = my_str.index('_') print(idx) # 👉️ 5 new_str = my_str[0:idx] + ' ' + my_str[idx+1:] print(new_str) # "hello world"

如果您必须这样做,通常会定义一个可重用的函数。

主程序
def get_updated_str(string, index, new_char): return string[:index] + new_char + string[index+1:] new_str = get_updated_str('abcd', 0, 'Z') print(new_str) # 👉️ Zbcd

该函数以一个字符串、索引和一个替换字符作为参数,并返回一个替换了指定索引处的字符的新字符串。

如果函数中需要更新多个字符,切片时使用替换字符串的长度。

主程序
def get_updated_str(string, index, new_chars): return string[:index] + new_chars + string[index+len(new_chars):] new_str = get_updated_str('abcd', 0, 'ZX') print(new_str) # 👉️ ZXcd new_str = get_updated_str('abcd', 0, 'ZXY') print(new_str) # 👉️ ZXYd new_str = get_updated_str('abcd', 0, '_') print(new_str) # 👉️ _bcd

该函数接受一个或多个字符,并使用替换字符串的长度来确定第二个切片的起始索引。

如果用户传递了一个包含 2 个字符的替换字符串,那么我们会从原始字符串中省略 2 个字符。

目录

  1. TypeError: ‘int’ 对象不支持项目分配
  2. ‘numpy.float64’ 对象不支持项目分配

TypeError: ‘int’ 对象不支持项目赋值

当我们尝试使用方括号为整数赋值时,会出现 Python“TypeError: ‘int’ object does not support item assignment”。

要解决错误,请更正赋值或访问器,因为我们不能改变整数值。

typeerror int 对象不支持项赋值

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

主程序
my_int = 123 # ⛔️ TypeError: 'int' object does not support item assignment my_int[0] = 9

我们试图更改0导致错误的整数索引处的数字。

声明一个具有不同名称的单独变量

如果您打算声明另一个整数,请声明一个具有不同名称的单独变量。

主程序
my_int = 123 print(my_int) # 👉️ 123 my_other_int = 9 print(my_other_int) # 👉️ 9

改变列表中的整数值

整数、浮点数和字符串等基本类型在 Python 中是不可变的。

如果您打算更改列表中的整数值,请使用方括号。

主程序
my_list = [1, 2, 3] my_list[0] = 9 print(my_list) # [9, 2, 3] my_list.append(4) print(my_list) # [9, 2, 3, 4] my_list.insert(0, 10) print(my_list) # [10, 9, 2, 3, 4]

Python 索引是从零开始的,因此列表中的第一项的索引为0,最后一项的索引为-1len(a_list) - 1

我们使用方括号来更改 index 处的列表元素的值0

您可以使用该append()方法将项目添加到列表末尾或使用该insert()方法在特定索引处添加项目。

更新二维列表中的值

如果您有二维列表,则更新时必须访问正确索引处的列表项。

主程序
my_list = [[1], [2], [3]] my_list[0][0] = 9 print(my_list) # 👉️ [[9], [2], [3]]

我们访问了第一个嵌套列表 (index 0),然后更新了嵌套列表中第一项的值。

错误地将列表重新分配给整数

确保您没有多次声明同名变量,并且您没有错误地将列表重新分配给某处的整数。

主程序
my_list = [1, 2, 3] my_list = 100 # ⛔️ TypeError: 'int' object does not support item assignment my_list[0] = 'abc'

我们最初声明了该变量并将其设置为一个列表,但是后来它被设置为一个整数。

尝试将值分配给整数会导致错误。

要解决该错误,请追踪变量在何处被分配了一个整数并更正该分配。

通过运行计算获取新列表

如果您需要通过对原始列表的每个整数值运行计算来获取新列表,请使用列表
理解

主程序
my_list = [1, 2, 3] my_new_list = [x + 10 for x in my_list] print(my_new_list) # 👉️ [11, 12, 13]

Python“TypeError: ‘int’ object does not support item assignment”是在我们尝试改变 int 的值时引起的。

检查变量存储的类型

如果不确定变量存储的类型,请使用内置type()类。

主程序
my_int = 123 print(type(my_int)) # 👉️ <class 'int'> print(isinstance(my_int, int)) # 👉️ True

类型

返回对象的类型。

如果传入的对象是传入类的实例或子类,则isinstance函数返回
True

‘numpy.float64’ 对象不支持项目赋值

当我们尝试使用方括号为 NumPy 浮点数赋值时,会出现 Python“TypeError: ‘numpy.float64’ object does not support item assignment”。

要解决错误,请更正赋值或访问器,因为我们不能改变浮点数。

typeerror numpy float64 对象不支持项目分配

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

主程序
import numpy as np my_float = np.float64(1.1) # ⛔️ TypeError: 'numpy.float64' object does not support item assignment my_float[0] = 9

0我们试图更改NumPy 浮点数索引处的数字。

声明多个浮点数

如果您打算声明另一个浮点数,只需声明一个具有不同名称的单独变量。

主程序
import numpy as np my_float = np.float64(1.1) print(my_float) # 👉️ 1.1 my_other_float = np.float64(2.2) print(my_other_float) # 👉️ 2.2

浮点数是不可变的

浮点数、整数和字符串等基本类型在 Python 中是不可变的。

如果需要更新浮点数数组中的值,请使用方括号。

主程序
my_arr = np.array([1.1, 2.2, 3.3], dtype=np.float64) my_arr[0] = 9.9 print(my_arr) # 👉️ [9.9 2.2 3.3]

我们更改了 index 处的数组元素的值0

错误地将变量重新分配给 NumPy 浮点数

确保您没有多次声明同名变量,并且您没有错误地将列表重新分配给某处的浮点数。

主程序
import numpy as np my_arr = np.array([1.1, 2.2, 3.3], dtype=np.float64) my_arr = np.float64(1.2) # ⛔️ TypeError: 'numpy.float64' object does not support item assignment my_arr[0] = np.float64(5.5)

我们最初将变量设置为 NumPy 数组,但后来将其重新分配为浮点数。

尝试更新浮点数中的数字会导致错误。

当处理二维数组时

如果您有一个二维数组,请在更新时访问正确索引处的数组元素。

主程序
my_arr = np.array([[1.1], [2.2], [3.3]], dtype=np.float64) my_arr[0][0] = 9.9 # [[9.9] # [2.2] # [3.3]] print(my_arr)

我们访问了第一个嵌套数组 (index 0),然后更新了嵌套数组中第一项的值。

Python 索引是从零开始的,因此列表中的第一项的索引为0,最后一项的索引为-1len(a_list) - 1

检查变量存储的类型

Python “TypeError: ‘float’ object does not support item assignment” 是在我们尝试改变 float 的值时引起的。

如果不确定变量存储的类型,请使用内置type()类。

主程序
import numpy as np my_float = np.float64(1.1) print(type(my_float)) # 👉️ <class 'numpy.float64'> print(isinstance(my_float, np.float64)) # 👉️ True

类型

返回对象的类型。

如果传入的对象是传入类的实例或子类,则isinstance函数返回
True