目录
TypeError: ‘str’ object does not support item assignment
TypeError: ‘str’ 对象不支持项目分配
当我们尝试修改字符串中的字符时,会出现 Python“TypeError: ‘str’ object does not support item assignment”。
字符串在 Python 中是不可变的,因此我们必须将字符串转换为列表,替换列表项并将列表元素连接成字符串。
下面是错误如何发生的示例。
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 只替换第一次出现的(可选) |
默认情况下,该str.replace()
方法会替换字符串中出现的所有子字符串。
如果您只需要替换第一个匹配项,请将count
参数设置为
1
.
my_str = 'apple, banana, apple' new_str = my_str.replace('apple', 'melon', 1) print(new_str) # 👉️ "melon, banana, apple"
将参数设置count
为1
意味着仅替换第一次出现的子字符串。
将字符替换为列表的转换
替换字符串中特定索引处的字符的一种方法是:
- 将字符串转换为列表。
- 更新指定索引处的列表项。
- 将列表项连接成一个字符串。
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
,最后一个字符的索引为-1
or 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 个字符。
目录
TypeError: ‘int’ 对象不支持项目赋值
当我们尝试使用方括号为整数赋值时,会出现 Python“TypeError: ‘int’ object does not support item assignment”。
要解决错误,请更正赋值或访问器,因为我们不能改变整数值。
下面是错误如何发生的示例。
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
,最后一项的索引为-1
或len(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”。
要解决错误,请更正赋值或访问器,因为我们不能改变浮点数。
下面是错误如何发生的示例。
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
,最后一项的索引为-1
或len(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