簡體   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