复杂列表和len计算

时间:2014-09-02 08:36:47

标签: python

以下代码的输出为[1, 3, 6, 10]。我知道如何获得1和3而不是6和10。 在第一个循环中,第一个列表项1等于[my_list[0]],3等于[out_list[len(out_list)-1] + my_list[i]] 在第二个循环中,out_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_list保持不变,然后我就被困在这里......

4 个答案:

答案 0 :(得分:0)

  1. out_list[len(out_list)-1]只是out_list中的最后一项,与out_list[-1]相同。
  2. 模糊地添加项目到列表。执行lst += [smtn]与执行lst.append(smtn)
  3. 相同

    这会让你的功能更具可读性吗?

    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_list中的下一项是5,则out_list中的下一项将是10 + 5 = 15.

    编辑: 为了澄清更多,请分阶段进行。

    • my_list = [1,2,3,4]我们输入方法
    • 进入后,我们有out_list = [my_list[0]]。所以现在out_list = [1]
    • 现在我们进入循环:
      • 第一次迭代,i = 1。 out_list[len(out_list)-1] + my_list[i] = out_list[0] + my_list[1] = 1 + 2 = 3out_list = [1,3]
      • 第二次迭代,i = 2。 out_list[len(out_list)-1] + my_list[i] = out_list[1] + my_list[2] = 3 + 3 = 6. out_list = [1,3,6]
      • 第三次迭代,i = 3。 out_list[len(out_list)-1] + my_list[i] = out_list[2] + my_list[3] = 6 + 4 = 10. out_list = [1,3,6,10]

答案 1 :(得分:0)

output = mystery([1, 2, 3, 4]) # [1, 3, 6, 10]
output == [1, 1+2, 1+2+3, 1+2+3+4]

答案 2 :(得分:0)

my_list最初是:[1,2,3,4]    out_list最初是:[1]

每个iter的1次迭代列表中的

out_list:[1]    我在这里:1    len(out_list):1 my_list [i]:2    使用以下语句添加下一个元素:out_list + = [out_list [len(out_list)-1] + my_list [i]]    在这里查看:out_list [0]给1添加到2

每个iter的2次迭代列表中的

out_list:[1,3]    我在这里:2    len(out_list):2 my_list [i]:3    使用以下语句添加下一个元素:out_list + = [out_list [len(out_list)-1] + my_list [i]]    在这里查看:out_list [1]给出3将其添加到3

每个iter的3次迭代列表中的

out_list:[1,3,6]    我在这里:3    len(out_list):3 my_list [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 =所以仅在第3次和第4次迭代中结果为6和10

答案 3 :(得分:-1)

一种非常容易实现这一目的的pythonic方式:

def summer_foo(my_list):
    return [sum(my_list[:i+1]) for i in range(len(my_list))]

简要说明

  1. 从0循环到列表的len - len(my_list)
  2. 汇总从0到i
  3. 的所有元素
  4. 将此元素放入列表中(这是通过理解完成的)
  5. 如果i等于0,您将获得第一个元素。

    如果i等于1,您将获得第一个和第二个元素的总和(i属于[0,2))

    等等......