帮老哥忙看下代码
for i in range(n):if i == 0:
temp = list(gra.keys())
a.append(temp)
print(1,a)
a.append(gra)
print(2,a)
m = keys.index(temp)# 该节点在字典的位置
t = a[-1]#上一结点
print(3,t)
m = keys.index(t)
print(4,m)#该节点在字典的位置
num_kids = listlen #该节点的子节点个数
temp = gra
print(5,temp)
if num_kids > 1:
gra.pop(0)
a.append(temp)
print(a)
这段代码哪里有问题,运行第三次循环会显示下标超出 这段代码中出现了下标超出的问题。具体来说,当temp是字典gra中的最后一个键时, gra[ i]会超出索引范围。
为了解决这个问题,可以将gra[ i]改为gra ,因为temp是gra字典中的一个键,它对应的值是一个列表,而我们只需要取出这个列表中的第一个元素即可。
修改后的代码如下:
for i in range(n):
if i == 0:
temp = list(gra.keys())[ i]
a.append(temp)
print(1, a)
a.append(gra)
print(2, a)
m = keys.index(temp)# 该节点在字典的位置
t = a[-1]# 上一结点
print(3, t)
m = keys.index(t)
print(4, m)# 该节点在字典的位置
num_kids = listlen# 该节点的子节点个数
temp = gra
print(5, temp)
if num_kids > 1:
gra.pop(0)
a.append(temp)
print(a)
isdkz 发表于 2023-9-20 17:46
这段代码中出现了下标超出的问题。具体来说,当temp是字典gra中的最后一个键时, gra[ i] ...
还是不行啊,报错是第三次循环,不是第一次if判断中的 能不能具体一点,或者把代码给全,你这样没头没尾的我们人类很难找到问题(毕竟我不是ai,做不到盲猜)
或者是完整的报错信息给我们 JasonChencCjj 发表于 2023-9-20 19:28
能不能具体一点,或者把代码给全,你这样没头没尾的我们人类很难找到问题(毕竟我不是ai,做不到盲猜)
...
lis = ['ACT', 'CTG', 'TGC', 'GCC', 'CCT', 'CTG', 'TGA', 'GAC', 'ACT', 'CTA']
gra = {'ACT': ['CTG', 'CTA'], 'CTG': ['TGC', 'TGA'], 'TGC': ['GCC'], 'GCC': ['CCT'], 'CCT': ['CTG'], 'TGA': ['GAC'], 'GAC': ['ACT']}
def getnum(dic):
listlen = []
for i,j in dic.items():
m = len(j)
listlen.append(m)
return listlen
a = []
n = len(lis)
listlen = getnum(gra)
keys = list(gra.keys())
for i in range(n):
if i == 0:
temp = list(gra.keys())
a.append(temp)
print(1,a)
a.append(gra)
print(2,a)
m = keys.index(temp)# 该节点在字典的位置
t = a[-1]#上一结点
print(3,t)
m = keys.index(t)
print(4,m)#该节点在字典的位置
num_kids = listlen #该节点的子节点个数
temp = gra
print(5,temp)
if num_kids > 1:
gra.pop(0)
a.append(temp)
print(a) 想将左侧的图转成右侧的图,目前是按顺序存到列表中
页:
[1]