Python for循环详解

一、for语句用于遍历序列的元素(如一个字符串,元组或列表)或其他可以迭代的对象。

基础

  • 示例代码

    list = [1,2,3,4,5]
    
    # for 迭代器 in 列表:
    for x in list:
        print(x, end=',')
  • 输出内容

    1,2,3,4,5,
  • 结论

    利用for循环可以对列表进行逐个访问, 每次向列表中取出一个元素,拷贝给迭代器。

深入

  • for循环有个计数器

    • 示例代码

      list = [1, 2, 3, 4, 5]
      for x in list:
          list.pop(0)
          print(x, end= " : ")
          print(list)
    • 输出内容

      1 : [2, 3, 4, 5]
      3 : [3, 4, 5]
      5 : [4, 5]
    • 逻辑描述

      循环取列表中的每个元素,
      第一次循环:
          取第一个元素(值:1)
          弹出(pop) 下标为0的元素(值:1)
          打印:1 : [2, 3, 4, 5]
      
      第二次循环:
          取第二个元素(值:3)
          弹出(pop) 下标为0的元素(值:2)
          打印:3 : [3, 4, 5]
      
      第三次循环:
          取第三个元素(值:5)
          弹出(pop) 下标为0的元素(值:3)
          打印:5 : [4, 5]
      
    • 总结

      每次弹出首个元素, x 还是会正常取到 n + 1 位置的元素值,说明 for 循环中有一个隐藏的计数器,来记录当前读到第几个元素了。

  • 是拷贝不是元素本身

    • 示例代码

      list = [1,2,3,4,5]
      for x in list:
          list.pop(0)
          print(" old: ", end=str(x))
          x = 1
          print(" new: ", end=str(x))
          print(" new list: ", end=str(list))
          print()
    • 输出内容

       old: 1 new: 1 new list: [2, 3, 4, 5]
       old: 3 new: 1 new list: [3, 4, 5]
       old: 5 new: 1 new list: [4, 5]
    • 总结

      每次修改元素 x 列表本身并没有修改,说明 x 不是元素本身,而是元素的拷贝。

  • 如何修改列表本身

    • 示例代码 1

      list = [1,2,3,4,5]
      for x in range(len(list)):
          print(list, end=' : ')
          print(list[x])
          list.pop(0)

      输出错误:因为它并不是迭代器,它是访问元素本身,因为list在每次循环时,都弹出元素,当list访问到不存在的下标元素时,发生了错误。

    • 示例代码 2

      list = [1, 2, 3, 4, 5]
      for x in range(len(list)):
          print(list, end=' : ')
          list[x] = 1
          print(list[x])
    • 输出内容

      [1, 2, 3, 4, 5] : 1
      [1, 2, 3, 4, 5] : 1
      [1, 1, 3, 4, 5] : 1
      [1, 1, 1, 4, 5] : 1
      [1, 1, 1, 1, 5] : 1

总结

从代码中可以看出,这是一个典型的迭代器,它具备计数功能。
每一次for循环,它的计数器都会加 1,若访问到了下个元素,则拷贝其值到迭代器 x 中,若访问不到下个元素,则退出当前循环。它访问的不是元素本身,而是元素的拷贝。

二、for else

break 关键字终止当前循环就不会执行当前的 else 语句,而使用 continue 关键字快速进入下一论循环,或者没有使用其他关键字,循环的正常结束后,就会触发 else 语句。

触发 else

  • 正常结束的循环

    list = [1,2,3,4,5]
    for x in list:
        print(x)
    else:
        print("else")
  • 使用 continue 关键字

    list = [1,2,3,4,5]
    for x in list:
        continue
        print(x)
    else:
    

不触发 else

list = [1,2,3,4,5]
for x in list:
    print(x)
    break
else:
    print("else")

总结

for else语句可以总结成以下话。
如果我依次做完了所有的事情(for正常结束),我就去做其他事(执行else),若做到一半就停下来不做了(中途遇到break),我就不去做其他事了(不执行else)。

  1. 只有循环完所有次数,才会执行 else
  2. break 可以阻止 else 语句块的执行。

猜你喜欢

转载自blog.csdn.net/z1508827637/article/details/80723409