这个 for 循环在 jupyter notebook 中是如何工作的?

how does this for loop works in jupyter notebook?

所以我正在 jupyter notebook 中学习这个 for 循环,我被告知要打印一次苹果,两次打印香蕉和三次共和国,这是代码:(正确)

a = ["apple", "banana", "republic" ]
for i in range(len(a)):
    for j in range(i + 1):
         print(a[i])

所以关键是,我不明白这段代码是如何工作的,比如 'i' 和 'j' 代表什么。谁能帮忙,谢谢!

在 python 中,循环是 foreach Like 循环,所以当你调用 range(number) 函数时,它会创建一个生成器(它是可迭代的)(当转换为列表时)看起来像这样:

 print(list(range(3)))
 >> [0,1,2]

并且 j 的值正在迭代抛出这些数字,例如,在外循环的第三次迭代中,第二次迭代中的内部循环 thvales 是

i=2
j=1

并且 len 函数返回一个表示列表长度的数字

The most effective debugging tool is still careful thought, coupled with judiciously placed print statements. — Brian Kernighan, Unix for Beginners

在代码中添加 print 语句,直到您理解发生了什么。

a = ["apple", "banana", "republic" ]
print('len(a): ', len(a))
for i in range(len(a)):
    print('i: ', i, '; for j in range(', i+1, ')')
    for j in range(i + 1):
         print('j: ', j)
         print(a[i])

现在 运行 看看它在做什么。

fruit这里赋给了fruits中的每一个值;因此 fruit in fruits.

print(fruit) 将对 fruits 列表中的每个项目执行一次,每次将 fruit 分配给列表中从第一个开始的下一个值。

fruits = ['apple', 'banana', 'republic']

for fruit in fruits:
    print(fruit)

apple
banana
republic

您可以使用 enumerate 函数获取一个元组,该元组不仅包含上述 fruit 变量,还包含 fruits 列表中的索引。

for idx, fruit in enumerate(fruits):
    print(idx, fruit)

0 apple
1 banana
2 republic

range 函数可以帮助您 运行 对 idx 变量值进行 for 循环(+ 1,因为 idx0 开始)。它本质上为您提供了类似于列表(称为迭代器)的东西,在本例中 [0] [0, 1] [0, 1, 2] 但实际值​​与我们无关。

for idx, fruit in enumerate(fruits):
    for _ in range(idx + 1):
        print(fruit)

apple
banana
banana
republic
republic
republic

检查 Google Colab 处的代码。

注。 _ 是一个不会被使用的变量名的约定。