鱼C论坛

 找回密码
 立即注册
查看: 2133|回复: 2

[已解决]迭代循环中i j的问题

[复制链接]
发表于 2020-4-26 22:56:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如果在迭代中嵌套迭代,分别命名为i j 和命名为 i i 是不同的,希望有大佬能够帮我解答下原理:
  1. >>> a = [1, 2, 3]
  2. >>> b = [1, 3, 2, 1]
  3. >>> for i in range(len(a)) :
  4.         for j in range(len(b)):
  5.                 if a[i] == b[i]:
  6.                         print (a[i],b[i])

  7.                        
  8. 1 1
  9. 1 1
  10. 1 1
  11. 1 1
复制代码

  1. >>> a = [1, 2, 3]
  2. >>> b = [1, 3, 2, 1]
  3. >>> for i in range(len(a)) :
  4.         for i in range(len(b)):
  5.                 if a[i] == b[i]:
  6.                         print (a[i],b[i])

  7.                        
  8. 1 1
  9. Traceback (most recent call last):
  10.   File "<pyshell#12>", line 3, in <module>
  11.     if a[i] == b[i]:
  12. IndexError: list index out of range
复制代码

最佳答案
2020-4-27 09:17:47
多层for循环迭代的话,内层的迭代名称不能与外层一样,否则内层的迭代名称名称会覆盖外层的迭代名称。
也就是说你的程序中两层都用的是i的话,外层的作用就仅仅是把内层循环原封不动的重复执行了几次。

另外你的循环体内语句是判断a[i]==b[i],那没必要双层循环啊
  1. a = [1, 2, 3]
  2. b = [1, 3, 2, 1]
  3. for i in range(min(len(a),len(b))):#这里取两个列表长度较小的一个
  4.     if a[i]==b[i]:
  5.         print(a[i],b[i])
复制代码


不过我看你的程序可能是想从列表b中找和列表a中元素相等的元素吧
那么if判断的条件需要改一下
  1. a = [1, 2, 3]
  2. b = [1, 3, 2, 1]
  3. for i in range(len(a)) :
  4.     for j in range(len(b)):
  5.         if a[i] == b[j]:
  6.             print (a[i],b[j])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-27 08:32:49 | 显示全部楼层
Python没有那么智能,你的两个循环的变量都是i的话,在最里层循环,外层循环的i就被里层循环的i替换掉了

  1. a = [1, 2, 3]
  2. b = [1, 2, 3, 1]

  3. for i in range(len(a)):  # i1
  4.     # 这里写i的话代表i1
  5.     for i in range(len(b)):  # i2
  6.         # 这里写i的话就代表i2
  7.         if (a[i] == b[i]):  # 因为这里i(i2)是从0到3(b的长度 - 1),所以如果i == 3的时候,a[i]就会越界(因为a最大是a[2])
  8.         print(a[i], b[i])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-27 09:17:47 | 显示全部楼层    本楼为最佳答案   
多层for循环迭代的话,内层的迭代名称不能与外层一样,否则内层的迭代名称名称会覆盖外层的迭代名称。
也就是说你的程序中两层都用的是i的话,外层的作用就仅仅是把内层循环原封不动的重复执行了几次。

另外你的循环体内语句是判断a[i]==b[i],那没必要双层循环啊
  1. a = [1, 2, 3]
  2. b = [1, 3, 2, 1]
  3. for i in range(min(len(a),len(b))):#这里取两个列表长度较小的一个
  4.     if a[i]==b[i]:
  5.         print(a[i],b[i])
复制代码


不过我看你的程序可能是想从列表b中找和列表a中元素相等的元素吧
那么if判断的条件需要改一下
  1. a = [1, 2, 3]
  2. b = [1, 3, 2, 1]
  3. for i in range(len(a)) :
  4.     for j in range(len(b)):
  5.         if a[i] == b[j]:
  6.             print (a[i],b[j])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表