为什么FOR在重复时在代码中循环遍历数组中的最后一个(Python)?

为什么FOR在重复时在代码中循环遍历数组中的最后一个(Python)?,python,python-3.x,Python,Python 3.x,这是我在下面编写的代码示例: animals = ['rat', 'fish', 'fool', 'cat', 'lion'] for animals in animals: print('i am a ' + animals) print('\n \n') for animals in animals: print('i am a ' + animals) print('\n \n') for animals in animals: print('i am a

这是我在下面编写的代码示例:

animals = ['rat', 'fish', 'fool', 'cat', 'lion']
for animals in animals:
    print('i am a ' + animals)

print('\n \n')

for animals in animals:
    print('i am a ' + animals)

print('\n \n')

for animals in animals:
    print('i am a ' + animals)

print('\n \n')

for animals in animals:
    print('i am a ' + animals)
问题是:第一个“print”命令正确打印,但下一个“for,in,print”命令循环遍历数组中“lion”的每个字母,随后的打印命令只对“lion”中的最后一个字母重复“n”

我写的代码有什么问题吗?有人知道发生了什么吗?任何帮助或指导都将不胜感激


谢谢

每次进入for循环时,您都在重新分配变量“anies”。因此,在第一个循环的末尾,动物不再是你的列表,而是字符串“狮子”。在第二个循环的末尾,动物被分配到字符串“n”,并在最后一个循环中保持这样。如果您按如下方式更正代码,则一切都是一样的:

animals = ['rat', 'fish', 'fool', 'cat', 'lion']
for animal in animals:
    print('i am a ' + animal)

print('\n \n')

for animal in animals:
    print('i am a ' + animal)

print('\n \n')

for animal in animals:
    print('i am a ' + animal)

print('\n \n')

for animal in animals:
    print('i am a ' + animal)

这是因为您的迭代器与列表同名,因此您应该将其重命名为
animal

animals = ['rat', 'fish', 'fool', 'cat', 'lion']
for animal in animals:
    print('i am a ' + animal)

print('\n \n')

for animal in animals:
    print('i am a ' + animal)

print('\n \n')

for animal in animals:
    print('i am a ' + animal)

print('\n \n')

for animal in animals:
    print('i am a ' + animal)

这是因为您正在使用动物中的动物:用于所有for循环,这意味着
狮子
将存储在第一个for循环末尾的
动物
中,并将喂给第二个for循环,依此类推。
您必须对动物中的动物使用

这是因为您的迭代变量与列表的名称相同

在第一个for循环结束时,“动物”变成“狮子”


因此,第二个循环贯穿“lion”。同样,在第二个循环结束时,变量变为“n”

列表和索引变量使用相同的变量名,最后一个变量被分配给
动物
,下一个循环在
狮子
上运行,作为
动物
的值,而不是您想要的列表。你应该这样做

对于动物中的动物:

我写的代码有什么问题吗

其实很多事情。 我相信你想把每种动物的名字打印在一行上,这样就可以尝试for循环了。现在循环的重点是减少代码冗余。但是,您已经为循环编写了四次,这与循环的目的背道而驰。

这是:

for animals in animals:
    print(animals)
实际上相当于:

 for i in range(len(animals)):
     animals = animals[i]
     print(animals)

如您所见,这将重新绑定名称
动物
,因此在此循环之后
动物
指向原始列表中的最后一项(在您的示例中,字符串
“lion”
)。由于字符串是可写的,所以第二个for循环迭代
动物中的单个字母(现在指向字符串
狮子
),因此在第二个循环之后,
动物
现在指向
狮子
中的最后一个字母,即
“n”
。接下来的循环现在都迭代(一个字母)字符串
“n”

对于动物中的动物:打印(动物)
试试这个。