15588686105 发表于 2023-9-20 17:45:49

帮老哥忙看下代码

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)
这段代码哪里有问题,运行第三次循环会显示下标超出

isdkz 发表于 2023-9-20 17:46:01

这段代码中出现了下标超出的问题。具体来说,当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)

15588686105 发表于 2023-9-20 17:50:29

isdkz 发表于 2023-9-20 17:46
这段代码中出现了下标超出的问题。具体来说,当temp是字典gra中的最后一个键时, gra[ i]   ...

还是不行啊,报错是第三次循环,不是第一次if判断中的

JasonChencCjj 发表于 2023-9-20 19:28:11

能不能具体一点,或者把代码给全,你这样没头没尾的我们人类很难找到问题(毕竟我不是ai,做不到盲猜)

或者是完整的报错信息给我们

15588686105 发表于 2023-9-20 20:53:30

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)

15588686105 发表于 2023-9-20 20:55:43

想将左侧的图转成右侧的图,目前是按顺序存到列表中
页: [1]
查看完整版本: 帮老哥忙看下代码