将列表中的数字范围替换为该范围内的数字总和(Python)

将列表中的数字范围替换为该范围内的数字总和(Python),python,list,Python,List,我试图用列表中的一系列数字的总和来替换列表中的一系列数字。注意,我不想替换整个列表,只替换该列表中的特定范围 这是我的密码: nodes_list = [[1], [2], [3]] new_dict = {1: [1], 2: [1, 2], 3: [1, 3]} O_D_list = [[1, 1, 0], [1, 2, 100], [1, 3, 150]] b = max(new_dict) for key in new_dict: for i in nodes_list:

我试图用列表中的一系列数字的总和来替换列表中的一系列数字。注意,我不想替换整个列表,只替换该列表中的特定范围

这是我的密码:

nodes_list = [[1], [2], [3]]
new_dict = {1: [1], 2: [1, 2], 3: [1, 3]}
O_D_list = [[1, 1, 0], [1, 2, 100], [1, 3, 150]]

b = max(new_dict)

for key in new_dict:

    for i in nodes_list:
        if i[0] in new_dict[key]:
            i.append(sum(O_D_list[b-1][2]))
             #this is where I am stuck.  I would like to get the SUM of the numbers in range O_D_list[b-1][2] and then append only that sum to nodes_list.

    b -= 1

print ('nodes list', nodes_list)
print ('O_D_list', O_D_list)
print ('b', b)
以下是我的输出:

File "location", line 13, in <module>    
i.append(sum(O_D_list[b-1][2]))
TypeError: 'int' object is not iterable
如果从第13行中删除“sum()”,则会得到以下输出:

nodes list [[1, 150, 100, 0], [2, 100], [3, 0]]
O_D_list [[1, 1, 0], [1, 2, 100], [1, 3, 150]]
b 0
因此,我知道我希望
节点\u列表[0][1]
等于250:(150+100)。但我只想显示那个总数

谢谢

一种可能的解决方案:

nodes_list = [[1], [2], [3]]
new_dict = {1: [1], 2: [1, 2], 3: [1, 3]}
O_D_list = [[1, 1, 0], [1, 2, 100], [1, 3, 150]]

b = max(new_dict)
for key,value in new_dict.items():
    for i in nodes_list:
        if i[0] in value and len(i)==1:
            i.append(sum((x[2] for x in O_D_list[:b])))
    b -= 1
要解释代码:

  • 在第二行(即最后一行)中,它在嵌套循环中的特定索引上循环,我们使用生成器表达式生成子列表中索引为2的所有值的伪列表,仅使用第一个
    b
    子列表。然后将其相加并添加到列表
    i
  • 在代码中,您继续向节点列表[0]添加值,因为每次从
    new\u dict
    访问新的键值对时,您都会在
    节点列表
    上循环。在上面的代码中处理这个问题的一个(糟糕的)快速修复方法是仅在
    i
    仅包含一个值时追加。我不知道您打算如何使用此代码,但我想一个合理的改进是调整
    节点列表
    新目录
    和/或
    O\u列表
    的结构
输出:

[[1, 250], [2, 100], [3, 0]]

为了解释您得到的输出:
sum(O_D_list[b-1][2])
正在计算,例如在第一次迭代中
sum(150)
作为
b=3
。对单个值求和没有多大意义。是您想要的
O_D_列表[0][2]+O_D_列表[1][2]+O_D_列表[2][2]
?您好!我运行了
sum(O_-D-u-list[:][2]
,我得到了一个输出:
节点列表[[1,154,154,154],[2,154],[3,154]
,这意味着它给了我150+3+1。但是我感谢你让我知道了
sum(O-D-u-list[b-1][2]的情况)
,这很有道理。您能更好地解释一下您的范围的用途吗,尤其是
[1]
?我不明白为什么该值会选择每个子列表的最后一个元素。我会在一次讲座中写出一个可能的答案,虽然这看起来不错。45分钟后会给你回复。谢谢!好吧,在一个更大的示例上测试完你的代码后,我意识到我没有完全定义问题。我意识到我需要做的是:步骤1:c检查
b
是否在
new_dict
值中,还检查
b
是否可以在
O_列表中的任何列表中找到。如果
b
可以在
new_dict
O_列表中找到,我们将
O_列表中的第三项添加到
O_列表中
节点列表中的所有值
@M.T我将为此提出一个新问题。再次感谢您的帮助。
[[1, 250], [2, 100], [3, 0]]