[英]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]
此问题导致的问题如下:
以下是针对此特定问题的一些解决方案:
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.