将列表中的数字范围替换为该范围内的数字总和(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]]