2

我用来学习 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 中的所有项目继续进行。

我只是不能完全解决这个问题。我不是在寻找答案,因为我这样做是为了增加知识——但我觉得我在这方面落后了):

4

5 回答 5

6

希望这个简单的例子有助于澄清,以下两段代码做同样的事情:

使用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循环允许您直接迭代可迭代的内容,而不是while循环方法,您可以跟踪索引并使用索引访问项目。

于 2012-08-03T19:09:47.097 回答
3

for 循环将遍历一个可迭代对象(通常是一个列表)的所有内容并对每个成员对象执行一个操作,然后在没有更多对象循环时退出循环。Python 标准文档很好地解释了这一点:

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

所以例如代码

for x in xrange(10):
    print x

将打印数字 0 到 9

于 2012-08-03T19:07:27.817 回答
1

在给出的解释中,L是一个可迭代的. 这可以是一个序列(例如列表、元组、字符串)或一个生成器(例如xrange())。iterable的每个元素依次绑定name x,循环体被执行。

于 2012-08-03T19:08:24.667 回答
0

在您的第一个版本中,您定义了一个索引变量 i,然后访问 L[i]。除了 if i == x return 之外,没有其他需要 i。

“for x in sequence”习语抽象出索引变量。不是直接访问 L[i],而是有一个变量来表示循环中 L 中的每个项目。

于 2012-08-03T19:10:25.553 回答
0

所以,假设我有一个包含 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将是列表中的一项。

于 2012-08-03T19:16:21.863 回答