使用enumerate()进行列表元素之间的操作

时间:2017-09-01 12:04:44

标签: python python-3.x enumerate

到目前为止,给定一个列表L,我使用range(len(L))来访问其元素:

L = [4, 3, 5, 2, 7]

for i in range(len(L)):
    print(i, "-", L[i])

但是,我已经读过这种方法不是pythonic ,并且有一个名为enumerate的函数也可以完成这项工作:

L = [4, 3, 5, 2, 7]

for i, n in enumerate(L):
    print(i, "-", n)

现在,请允许我提出一个问题,以显示我用这种方法遇到的麻烦:

  

给定一个整数列表L,转换列表,使得结果列表中的每个元素n都是初始列表中n之前元素的总和。

使用第一种方法:

L = [4, 3, 5, 2, 7]

for i in range(1, len(L)):
    L[i] = L[i] + L[i - 1]

尝试第二种方法时:

L = [4, 3, 5, 2, 1]

for i, n in enumerate(L): #It starts at element 0!
    L[i] = n + L[i - 1]

此问题导致的问题如下:

  • 如何在元素1处进行枚举启动?
  • 在这种情况下,第二种方法真的值得吗?
  • 如果之前的答案是“否”,那么它何时值得呢?

2 个答案:

答案 0 :(得分:0)

以下是解决此特定问题的一些方法:

L = [4, 3, 5, 2, 7]

# Solution 0
print([sum(L[0:i + 1]) for i in range(len(L))])

# Solution 1
res = [0]
for i, n in enumerate(L):
    res.append(res[-1] + n)

print(res[1:])

# Solution 2
for i, n in enumerate(L[1:]):
    L[i + 1] = L[i + 1] + L[i]
print(L)

答案 1 :(得分:-1)

回答L = [4, 3, 5, 2, 1] for i, n in enumerate(L, start=1):

你这样做:

def sourceTCresponse = context.expand('${SOAP Request#Response}') def sourceTCresponse_XML = new XmlParser().parseText(sourceTCresponse) def targetNode = sourceTCresponse_XML.'**'.find {it.name() == 'return'}