繁体   English   中英

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

[英]Using enumerate() for operations between the elements of a list

到目前为止,给定一个列表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开始?
  • 在这种情况下,第二种方法真的值得吗?
  • 如果先前的答案是“否”,那么何时才值得?

以下是针对此特定问题的一些解决方案:

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)

回答How can I make enumerate start at element 1

您可以这样进行:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM