【问题标题】:TypeError list indices must be integers or slices not strTypeError 列表索引必须是整数或切片而不是 str
【发布时间】:2021-11-28 05:38:07
【问题描述】:

我是 python 新手,遇到以下问题。当我运行这段代码时:

import numpy as np

my_file1 = open("ex2-dnalist1.txt")
my_file2 = open("ex2-dnalist2.txt")

lines1 = my_file1.readlines()
lines2 = my_file2.readlines()

def EditDistanceM(s,t):
    size_x = len(s) + 1    
    size_y = len(t) + 1 
    matrix = np.zeros((size_x, size_y)) 
    for x in range(size_x):
        matrix[x,0] = x
    for y in range(size_y):
        matrix[0,y] = y
    for x in range(1, size_x):
        for y in range(1, size_y):
            if s[x-1] == t[y-1]:        
                matrix[x,y] = min(
                    matrix[x-1, y] + 1, 
                    matrix[x-1, y-1],   
                    matrix[x, y-1] + 1  
                    )
            else:                      
                matrix[x,y] = min(
                    matrix[x-1, y] + 1,
                    matrix[x-1, y-1] +1,
                    matrix[x, y-1] + 1
                    )
                
    print(matrix)
    return (matrix[size_x - 1, size_y - 1])

list_10 = []
for n in lines1[n]:
    for m in lines2[m]:
        EditDistanceM(lines1[n],lines2[m])
        list_10 += EditDistanceM(lines1[n],lines2[m])

我得到错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-89-957aaf99b22e> in <module>
     34 
     35 list_10 = []
---> 36 for n in lines1[n]:
     37     for m in lines2[m]:
     38         EditDistanceM(lines1[n],lines2[m])

TypeError: list indices must be integers or slices, not str

即使我在 for 循环之外写入 n=0 和 m=0,我也会遇到相同的错误,但这次是在两个 for 循环内的 EditDistancM 函数。你能帮帮我吗?

【问题讨论】:

  • for n in lines1[n] 没有意义...看来您可能需要花更多时间阅读一些 Python 教程和初学者书籍,以了解 for 循环的真正工作原理。
  • 循环 for n in ... 将改变 n 的值。如果你的行中有字符,它们将是 n 的新值。然后循环再次执行,代码lines1[n] 现在使用n 的字符串值进行索引。

标签: python typeerror


【解决方案1】:

你的错误在这里:

list_10 = []
for n in lines1[n]:
    for m in lines2[m]:
        EditDistanceM(lines1[n],lines2[m])
        list_10 += EditDistanceM(lines1[n],lines2[m])

当你想循环遍历list 时,你不需要像lines1[n] 这样使用。 当您使用lines1[n] 时,这意味着您要访问list/array 元素。 当你想循环 list/array 时,你只需要使用 list/array 变量。 此外,当您想将element/item 添加到您的list/array 时,您需要使用.append 方法,而不是+=

试试这个:

list_10 = []
for n in lines1:
    for m in lines2:
        EditDistanceM(n,m)
        list_10.append(EditDistanceM(n,m))

【讨论】:

  • 但是nm 不是lines1lines2 列表的索引,这使得“固定”代码也错误。
  • @Someprogrammerdude 你是对的,我忘记了,我的答案已编辑。
猜你喜欢
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 2018-10-13
  • 2020-11-21
相关资源
最近更新 更多