[英]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.