【问题标题】:Unable to modify values in 2-dimensional matrix in python无法在python中修改二维矩阵中的值
【发布时间】:2013-10-19 02:04:20
【问题描述】:

我正在尝试在 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:列表索引必须是整数,而不是 str

【问题讨论】:

  • 这里没有没有分配;你能告诉我们完整的追溯吗?

标签: python matrix


【解决方案1】:

您将相等性测试与分配混合在一起:

if lineAppend[rline][cline]==".":
    lineAppend[rline][cline] == 0.0

注意这两行如何使用== 来测试是否相等。另一方面,赋值使用 one =:

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]

【讨论】:

    【解决方案2】:
    lineAppend[rline][cline] == 0.0
    

    不是赋值,只是比较。改成

    lineAppend[rline][cline] = 0.0
    

    【讨论】:

    • 当我将其更改为赋值运算符时,我仍然收到“str 不支持项目赋值”错误
    • @JeremyFisher:您需要向我们展示完整的追溯;如发布的那样,您的代码没有分配 任何东西,因此它不能成为异常的原因。
    • 我刚刚添加了回溯。即使将双等于更改为单等于后,我仍然不断收到错误,这是否意味着它可能是分配错误?
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多