我试图在python中修改二维矩阵中的数据(由一系列较小的序列表示)。矩阵值首先初始化为“0.0”(在下面的代码中显示为“当前”)。我有一个包含实际数据点的第二个二维矩阵,但是,这些数据点由“。”,“C”和“H”表示。我已经编写了下面的代码,基本上将这些字符转换为正确的值,但我遇到了错误“str对象不支持项目分配”。我知道字符串是不可变的,但是我没有改变字符串的单个字符,我正在删除整个字符串。这是代码:
for rline in range(len(lineAppend)):
for cline in range(len(lineAppend)):
if lineAppend[rline][cline]==".":
#print "is dot"
lineAppend[rline][cline] == 0.0
#lineAppend.remove(".")
#ineAppend.insert("0.0")
elif lineAppend[rline][cline]=="C":
lineAppend[rline][cline] == 25.0
elif lineAppend[rline][cline]=="H":
lineAppend[rline][cline] == 100.0
lineAppend是一个通过读取文本文件填充的矩阵。它只是读取每一行并将其保存为序列。我试图将单个索引更改为上述值,但我一直遇到因为字符串不可变而发生的错误。有没有其他方法可以将数据修改为所需的值?
这是追溯:
Traceback (most recent call last):
File "/home/Desktop/python_projects/temp.py", line 172, in <module>
main()
File "/home/Desktop/python_projects/temp.py", line 169, in main
read_config("plate.txt")
File "/home/Desktop/python_projects/temp.py", line 110, in read_config
if lineAppend[rline][cline]==".":
TypeError:list indices必须是整数,而不是str
答案 0 :(得分:2)
您正在将相等性测试与赋值混合使用:
if lineAppend[rline][cline]==".":
lineAppend[rline][cline] == 0.0
注意两行如何使用==
来测试相等性。另一方面,分配使用一个 =
:
if lineAppend[rline][cline] == ".":
lineAppend[rline][cline] = 0.0
您在整个代码中执行此操作;如果要分配,请使用单个等号。
此外,要遍历矩阵,您可以直接循环。当您需要分配到内部列表时,可以包含索引:
for rline in lineAppend:
for i, cline in enumerate(rline):
if cline == ".":
rline[i] = 0.0
elif cline == "C":
rline[i] = 25.0
elif cline == "H":
rline[i] = 100.0
如果要使用映射,整个嵌套循环可以用列表解析替换:
replacements = {'.': 0.0, 'C': 25.0, 'H': 100.0}
lineAppend = [[replacements.get(v, v) for v in rline] for rline in lineAppend]
答案 1 :(得分:1)
lineAppend[rline][cline] == 0.0
不是分配值,而只是比较。将其更改为
lineAppend[rline][cline] = 0.0