TypeError列表索引必须是整数或片而不是str

2024-10-03 02:46:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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函数。你能帮帮我吗


Tags: intxtforsizemynprangeopen
1条回答
网友
1楼 · 发布于 2024-10-03 02:46:33

你的错误在这里:

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上循环时,不需要使用like 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))

相关问题 更多 >