Python 复列表与len计算
以下代码的输出为Python 复列表与len计算,python,Python,以下代码的输出为[1、3、6、10]。我知道如何得到1和3,但不是6和10。 在第一个循环中,第一个列表项1等于[my\u list[0]],3等于[out\u list[len(out\u list)-1]+my\u list[i] 在第二个循环中,out\u list=4+[1+3]=8不是6 def mystery(my_list): out_list = [my_list[0]] for i in range(1, len(my_list)): ou
[1、3、6、10]
。我知道如何得到1和3,但不是6和10。
在第一个循环中,第一个列表项1等于[my\u list[0]]
,3等于[out\u list[len(out\u list)-1]+my\u list[i]
在第二个循环中,out\u list=4+[1+3]=8
不是6
def mystery(my_list):
out_list = [my_list[0]]
for i in range(1, len(my_list)):
out_list += [out_list[len(out_list)-1] + my_list[i]]
print(out_list)
mystery([1, 2, 3, 4]) #output[1, 3, 6, 10]
我非常接近理解它,只是需要多一点解释。我说得对吗?第一个循环,out_list=1,[out_list[len(out_list)-1]=1,my_list[i]=2,因此,[1,3]。第二圈,名单保持不变,然后我被困在这里
out\u list[len(out\u list)-1]
只是out\u list中的最后一项,与out\u list[-1]
相同lst+=[smtn]
与执行lst.append(smtn)
def mystery(my_list):
out_list = [my_list[0]]
for i in range(1, len(my_list)):
out_list.append(out_list[-1] + my_list[i])
print(out_list)
此代码返回一个列表,其i的项是输入的前i项之和。在i迭代中,取i-1项的总和(存储在i-1中),并从列表中添加第i项。3=1+2, 6=(1+2)+3, 10=(1+2+3)+4. 如果my_列表中的下一项是5,则out_列表中的下一项将是10+5=15
编辑:
为了进一步澄清,让我们分阶段进行
然后输入方法my_list=[1,2,3,4]
- 输入时,我们有
。所以现在out\u list=[my\u list[0]]
out\u list=[1]
- 现在我们进入循环:
- 第一次迭代,i=1<代码>输出列表[len(输出列表)-1]+我的列表[i]=
=输出列表[0]+我的列表[1]
=1+2
<代码>输出列表=[1,3]3
- 第二次迭代,i=2<代码>输出列表[len(输出列表)-1]+我的列表[i]=
=输出列表[1]+我的列表[2]
=3+3
6.
输出列表=[1,3,6]
- 第三次迭代,i=3<代码>输出列表[len(输出列表)-1]+我的列表[i]=
=输出列表[2]+我的列表[3]
=6+4
10.
输出列表=[1,3,6,10]
- 第一次迭代,i=1<代码>输出列表[len(输出列表)-1]+我的列表[i]=
def summer_foo(my_list):
return [sum(my_list[:i+1]) for i in range(len(my_list))]
简要说明
len(我的列表)
i的所有元素求和
i
等于0,则将获得第一个元素
如果i
等于1,您将得到第一个和第二个元素的总和(i
属于[0,2])
等等…我的列表最初是:[1,2,3,4]
output = mystery([1, 2, 3, 4]) # [1, 3, 6, 10]
output == [1, 1+2, 1+2+3, 1+2+3+4]
出局名单最初是:[1]
每个iter上1次迭代中的out_列表大纲:[1]
我来了:1
len(外名单):1我的名单[i]:2
使用此语句添加下一个元素:out_list+=[out_list[len(out_list)-1]+my_list[i]]
检查此处:签出列表[0]给出1将此添加到2
每个iter上的2个迭代大纲中的out_列表:[1,3]
我来了:2
len(名单外):2我的名单[i]:3
使用此语句添加下一个元素:out_list+=[out_list[len(out_list)-1]+my_list[i]]
检查这里:out_list[1]给出了3将此添加到3
每个国际热核实验堆的3个迭代大纲中的out_列表:[1,3,6]
我来了:3
len(名单外):3我的名单[i]:4
使用此语句添加下一个元素:out_list+=[out_list[len(out_list)-1]+my_list[i]]
检查这里:out_list[2]给出了6,将其添加到4
最后输出为:[1,3,6,10]
out_list+=[out_list[len(out_list)-1]+my_list[i]]此语句将上一个元素附加到out_list中,即为什么使用out_list+=而不是out_list=因此,只有在第三次和第四次迭代中,当您说4+[1+3]时,第三次循环的结果是6和10你从哪里得到4,1,3呢?1=1,3=1+2,6=3+3,10=6+4。实际上,
out\u列表[i]=out\u列表[i-1]+my\u列表[i]
,out\u列表中的每个元素都是它在out\u列表
和my\u列表[i]
中的前一个元素的总和。第一个循环:out\u列表(=4)=out\u列表(=1)[out\u列表”+my\u[i] 在第一个循环中,它是1(out_list)+(1+2)=4。在第二个循环中,它是4+[1+3]=8,依此类推?在第一个循环中,它是1(out_list)+(1+2)=4。在第二个循环中,它是4+[1+3]=8,依此类推?第一个循环[1]+[3]。第二个循环[1]+[3]+[[out_list[len len(out_list)-1]+3],就是[[out_list]1]=3?@dfefeff我在我的答案中添加了一个逐步的澄清。在第一个循环中,它是1(out_list)+(1+2)=4。在第二个循环中,4+[1+3]=8,依此类推?将两个列表相加并不能求和。它将它们串联起来。因此代码实际上是将数字转换成一个列表。它看起来像[1]+[3]
,变成[1,3]
。然后[1,3]+[6]
这是[1,3,6]
第一个循环,[1]+[3]。第二个循环,[1]+[3]+[[out\u list[len(out\u list)-1]+3],那是[[out\u list[len(out\u list)-1]=3?我认为当你对你的意图进行解释时,这对OP和其他访客会更有帮助。我很接近理解它,只是需要更多的解释。对吗?第一个循环,out_list=1,[out_list[len(out_list)-1]=1,my_list[I]=2,因此,[1,3].2nd循环,out_list保持不变,然后我被困在这里…在1st循环中,它是1(out_list)+(1+2)=4。在2nd循环中,4+[1+3]=8,依此类推?请注意,这是n^2,而不是原始的线性时间,因为我们正在重新计算每个元素的和,而不是重复使用前面所有元素的和。@dfefeff:上面的过程将告诉您如何在第三次迭代中得到6,在第四次迭代中得到10……因为out\u list是在eac中添加元素的列表h迭代。