zoukankan      html  css  js  c++  java
  • Python使用单个循环遍历二维数组

    通常情况下,在Python中遍历二维列表,常用的方法是两个for的嵌套,然而在操作过程中会发现一个问题,如果想要跳出两层循环会显得较为麻烦。

    numList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    for i in numList:
        for each in i:
            print(each, end=' ')
        print()
    

    输出结果:

    1 2 3 
    4 5 6 
    7 8 9 
    

    跳出两层循环,几种常见方法如封装成函数用return,设立标志变量,自定义异常......
    如果能把一些简单的嵌套循环,修改为只使用一个循环即可完成的代码,则在某些情况下会使操作方便许多,以下尝试用一个while循环遍历二维列表:

    numList = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    i = j = 0
    
    #如果将该二维列表比作4行3列的表格...
    while numList[i][j] != 5: #自行定义跳出条件
    
        #记录当前所在行并判断是否前进到下一行,依据是当前列是否到达该行的结尾
        i = (i if j != len(numList[i])-1 else i+1)
    
        #记录当前所在列并判断是继续前进还是回到列头,依据同样是是否到达该行的结尾
        j = (j+1 if j != len(numList[i])-1 else 0) 
    
        print(numList[i][j], end=' ')
    

    输出结果为:

    2 3 4 5
    

    如果这样写,既能自定义前进方式,又能简单的通过break,continue之类的关键字来控制循环,整个操作就比较灵活方便。而需要注意的点就是在进行判断时掌握好判断逻辑,避免出现bug。根据需要,对代码进行修改,还能达到三维,四维...的遍历。


    以上是个人根据平时总结的一些方法和技巧,若有疏漏或更好的建议,非常欢迎对此作出评论或提出意见,这样对我也会有很大的帮助!

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/minstrel-MH/p/12674800.html
Copyright © 2011-2022 走看看