簡體   English   中英

python:對於In循環 - 我沒有理解

[英]python: For In loops - i have no understanding

我用來學習python的資源讓你在自己的網站上執行模塊。 我認為它最初是為這所大學的學生設計的,所以這就是為什么我用家庭作業標記了這一點,盡管它不是。

無論如何:

他們讓我執行這項任務:

定義一個函數prod(L),它返回列表L中元素的乘積。

我使用此代碼使此功能正常工作:

def prod(L):
   i = 0
   answer = 1
   x = len(L)
   while i < x:
    answer = answer * L[i]
    i = i + 1
    if i == x:
         return answer

下一個模塊簡要介紹了For-In循環。 他們提出了一個問題:

像以前一樣定義函數prod(L),但這次使用新類型的循環。

我試過通過其他資源來了解如何使用這個,但我沒有遵循任何事情。 任何人都可以解釋,最好用簡單的英語解釋for-in循環如何工作?

供參考:這里是他們談到的關於for-in循環的一切

循環遍歷列表循環遍歷列表中的每個值是非常常見的(如上一個練習中所示)。 Python允許快捷方式執行此類操作,通常稱為“for all”循環或“for each”循環。 具體來說,當L是一個列表時,這個代碼

for x in L: «loop body block»

執行以下操作:首先將x設置為L中的第一個值並執行正文; 然后將x設置為L中的第二個值並執行正文; L中的所有項目都是如此。

我只是無法完全包圍這個。 我不是在尋找答案,因為我這樣做是為了知識增長 - 但我覺得我落后於此):

希望這個簡單的例子有助於澄清,以下兩段代碼做同樣的事情:

使用while循環:

L = ['a', 'b', 'c']
i = 0
while i < len(L):
    print L[i]
    i += 1

使用for循環:

L = ['a', 'b', 'c']
for c in L:
    print c

如果你想要索引和像你一樣的元素有一個while循環,pythonic的方法是使用枚舉:

L = ['a', 'b', 'c']
for index, element in enumerate(L): # returns (0,'a'),(1,'b'),(2,'c')
    print index
    print element

正如您在上面所看到的, for循環允許您直接遍歷iterable的內容,而不是while循環方法,您可以在其中跟蹤索引並使用索引訪問項目。

for循環將循環遍歷iterable(通常是列表)的所有內容,並對每個成員對象執行操作,然后在沒有更多對象循環時跳出循環。 Python標准文檔很好地解釋了這一點:

http://docs.python.org/tutorial/controlflow.html#for-statements

所以為了解釋代碼

for x in xrange(10):
    print x

將打印數字0到9

在給出的解釋中, L可迭代的 這可以是序列(例如列表,元組,字符串)或生成器(例如xrange() )。 iterable的每個元素依次綁定名稱 x ,並執行循環體。

在您的第一個版本中,您定義了索引變量i,然后訪問了L [i]。 除了if i == x返回之外,我沒有其他需要。

“for x in sequence”習語抽象出索引變量。 而不是直接訪問L [i],你有一個變量代表循環中L中的每個項目。

所以,假設我有一個包含10個數字的列表(整數,讓我們說)。

我可能想要做的一個常見任務是查看此列表,如果數字是偶數,我添加10。

所以,如果我輸入:[1,2,3,4,5]我會得到:[1,12,3,14,5]

我可以做的一件事就是循環,並且對於每個索引,檢查每個索引的值是偶數還是奇數。

但是,如果我不想考慮指數怎么辦? 我知道無論如何我必須遍歷整個列表,並且我真的不需要知道元素的索引來查找元素是偶數還是奇數。

所以,而不是:

lst = [1, 2, 3, 4, 5]
newLst=[]
i=0
while i < 10:
    if (lst[i]%2==0): # if element i of lst is even
        newLst+= [ lst[i]+10 ]
    i+=1

我可以這樣做:

for element in list:
    if(element%2==0):
        newLst+= [ element+10]
    else: newLst+= [element]

通過這樣做,我不必擔心索引,我知道element將是列表中的一個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM