Python中的for循环是如何工作的?深入了解一下,发生了什么过程?

3
我正在学习Python,但在使用for循环时遇到了很多困难。我知道它们与while循环类似。我的基本理解是,它们逐个遍历列表项并对其应用一个块。
但我似乎无法编写一个有效的for循环,我无法理解其中的某些东西。当我查看我的课程(Udacity)中的示例时,也不理解它如何工作。
以下是代码示例,可以正常运行,但我却无法想出这段代码,也无法确定为什么它能够正常工作:
def measure_udacity(U):
    count = 0
    for e in U:
        if e[0] == 'U':
            count = count + 1
    return count

print measure_udacity(['Dave','Sebastian','Katy'])
print measure_udacity(['Umika','Umberto'])
print measure_udacity(['udacity', 'United States', 'umbrella', 'U2'])

三个打印语句的输出分别为0、2和2。我猜想我不理解的是这一行代码的工作原理是什么?
        if e[0] == 'U':

如果您指定[0],那么它如何应用于位置[1]和[2]中的'Sebastian'和'Katy'?
在看到解决方案之前,我尝试编写相同的for循环,并且代码更像这样:
def measure_udacity(ulist):
    i = 0
    j = 0
    for i in ulist:
        if ulist[j] == 'U':
            i += 1
            j += 1
        else:
            j+=1
        return i

基本上是尝试提高在列表中搜索“U”时的位置。这像一袋砖试图漂浮一样失败了。到目前为止,Python非常简单,但我在for循环方面遇到如此多的麻烦,告诉我有些基本的东西我不理解。


e 是一个字符串,e[0] 表示它的第一个字符。 - hpaulj
2个回答

2
在Python中,for循环本质上是foreach循环,其中迭代变量是一个循环项,而不是索引。
如果想要同时获取索引,可以在列表上调用enumerate
for index, item in enumerate(items):
    print "{item} is at index {index}".format(item=item, index=index)

三个输出分别为0、2和2。我猜我不理解的是这行代码是如何工作的?
    if e[0] == 'U':

如果您指定的是[0],那么它如何应用于在位置[1]和[2]的'Sebastian'和'Katy'呢? 在这种情况下,e不是顶层U列表,而是U的一个项目。 e [0]然后是字符串e的第一个字符,而不是列表U的第一个项目。

2
当调用函数measure_udacity时,变量U是一个字符串列表。第一次调用时,U有三个元素,它们分别是'Dave'、'Sebastian'和'Katy'。for语句会导致缩进块对每个元素恰好运行一次,并且元素依次赋值给变量e。第一次循环时e='Dave',第二次循环时e='Sebastian',第三次循环时e='Katy'。Python会自动将这些赋值给变量e,您不需要编写任何额外的代码来执行此操作(就像您在问题中尝试做的那样)。这就是关于如何访问列表中的所有三个字符串的答案-它会自动发生,因为计算机通过循环三次,每次e都具有不同的值。
您询问了if e [0] == 'U'这行代码。我希望您现在能看到e是一个字符串,是列表U中的字符串之一。e [0]只是字符串中的第一个字符,所以此行比较第一个字符与“U”。如果为真,则计数器增加1。当您遍历整个列表时,计数器将等于以U开头的单词数。
希望这能帮助您,祝学习愉快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接