我用来学习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-loop是如何工作的吗?最好用通俗易懂的英语?
供参考:以下是他们谈论的关于for in loop 的所有内容
循环浏览列表这很常见(就像前面练习)循环遍历列表中的每个值。Python允许执行此类操作的快捷方式,通常称为"forall"循环"或"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
循环那样使用索引AND元素,那么使用enumerate:是一种Python方法
L = ['a', 'b', 'c']
for index, element in enumerate(L): # returns (0,'a'),(1,'b'),(2,'c')
print index
print element
正如您在上面看到的,for
循环允许您直接在可迭代项的内容上进行迭代,而while
循环方法用于跟踪索引并使用索引访问项。
for循环将循环遍历可迭代对象(通常是列表)的所有内容,并对每个成员对象执行一个操作,然后在没有更多对象可循环时脱离循环。Python标准文档很好地解释了这一点:
http://docs.python.org/tutorial/controlflow.html#for-报表
例如代码
for x in xrange(10):
print x
将打印数字0到9
在给出的解释中,L
是一个可迭代的。这可以是序列(例如列表、元组、字符串)或生成器(例如xrange()
)。迭代的每个元素都被依次绑定到名称x
,并执行循环体。
在您的第一个版本中,您定义了一个索引变量i,然后访问L[i]。除了if i==x返回之外,没有其他对i的需要。
"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
将是列表中的一项