在特定范围的列表中添加元素

时间:2018-10-25 15:17:23

标签: python python-3.x python-2.7

代码已经困扰了我好几个小时,并且我为使代码正常工作做出了几次失败的尝试。

我希望我的代码执行以下操作:

两个输入,“ numerical_representation”和“ names”输入到控制台。 然后,将根据数字表示中的值对“名称”中的某些元素进行求和。

>>> numerical_representation = (4, 6, 5, 11)
>>> names = (4, 16, 10, 17, 4, 15, 6, 4, 14, 7, 17, 9, 6, 27, 9, 1, 12, 0, 8, 20, 3, 0, 0, 4, 4, 3)

例如,由于我们首先在“数字表示形式”中使用4 将在“名称”中添加4、16、10、17,并返回47。

然后我们在“数字表示形式”中有6个,然后将添加“名称”中的下一个连续元素4,15,6,4,14,7,并返回50。

最后,我的目标是将'value_list'返回为 [47,50,68,55]

以下是我到目前为止所拥有的。

value_list = []    
for i in numerical_representation:
    sum_value = sum(names[:i])
    value_list.append(sum_value)
return value_list

但是,这将返回[47,66,62,106]。我相信发生这种情况是因为for迭代器一直从“名称”的开头开始进行迭代。

我应该如何进行?

3 个答案:

答案 0 :(得分:0)

一个较小的添加项将完成:

for i in numerical_representation:
    sum_value = sum(names[:i])  # since you slice from the beginning ...
    value_list.append(sum_value)
    names = names[i:]  # ... insert this line to move forward

答案 1 :(得分:0)

  

“但是,这将返回[47,66,62,106]。我相信这是   之所以发生是因为for迭代器从一开始就不断迭代   的“名称”。”

您已经解决了这个问题,只需要指出正确的方向 尝试while循环

答案 2 :(得分:0)

您需要存储每个操作的偏移量以设置起始位置:

value_list = [] 
start = 0
for i in numerical_representation:
    vals = names[start:start+i]
    sum_value = sum(vals)
    print(vals," sum to ",sum_value)
    value_list.append(sum_value)
    start = start + i