【问题标题】:How to traverse a 2D List in python如何在python中遍历二维列表
【发布时间】:2014-07-11 00:44:51
【问题描述】:

我有以下清单:

grid = [[2, 6, 8, 6, 9], [2, 5, 5, 5, 0], [1, 3, 8, 8, 7], [3, 2, 0, 6, 9], [2, 1, 4,5,8], [5, 6, 7, 4, 7]]

我使用 fowling 循环遍历每个元素 ->

for i in xrange(len(grid[i])):
    for j in xrange(len(grid[j])):
        print grid[i][j]
    print "\n"

但它不显示最后一行,即[5,6,7,4,7]

那么,在 python 中遍历 2D List 的正确方法是什么?

【问题讨论】:

  • for i in xrange(len(grid[i])) - 当执行进入这个循环时,不应该有 grid[i] 这样的东西,因为应该还没有 i 的值。也许您在同一个函数中错误地将一个变量用于两个不同的目的,或者您在循环之前初始化了i(您不应该这样做)。如果您想使用 range-len 迭代(您不应该这样做)来执行此操作,正确的行应该是 for i in xrange(len(grid)):for j in xrange(len(grid[i])):

标签: python list python-2.7


【解决方案1】:

遍历二维列表的正确方法是

for row in grid:
    for item in row:
        print item,
    print

Python 中的for 循环将在每次迭代中选择每个项目。因此,从grid 2-D 列表中,每次迭代都会选择 1-D 列表。在内部循环中,选择一维列表中的各个元素。

如果您使用的是 Python 3.x,请使用 print 作为函数,而不是语句,像这样

for row in grid:
    for item in row:
        print(item, end = " ")
    print()

输出

2 6 8 6 9
2 5 5 5 0
1 3 8 8 7
3 2 0 6 9
2 1 4 5 8
5 6 7 4 7

但是,如果您想更改特定索引处的元素,那么您可以这样做

for row_index, row in enumerate(grid):
    for col_index, item in enumerate(row):
        gird[row_index][col_index] = 1     # Whatever needs to be assigned.

【讨论】:

  • 在 python 中是否有任何二维列表操作,就像我们在 C 中所做的那样
  • 如果你觉得我的回答对你有帮助,你可以Accept my Answer,当系统允许你这样做的时候。 :-)
  • @DBB 您可以将二维列表视为列表的列表。包含其他列表对象的列表对象。
  • 对于可以通过那里的 Python3 用户:不要忘记将 print, Py2 语法更改为 print(item, end='') ;)
  • @MaximeLorant 当然,也包括在答案中。谢谢:-)
【解决方案2】:

为什么不:

for i in grid:
    for j in i:
        print("{}".format(j))
    print("\n")

【讨论】:

    【解决方案3】:

    尝试关注...

    for i in grid:
        for j in i:
            print j
        print '----'
    

    【讨论】:

    • 嗨,但是现在我想执行一些基本的列表操作,是否可以像网格 [i][j] 格式打印,因为我需要对列表列进行操作?
    【解决方案4】:

    请尝试关注。您可以进行必要的操作,而不是“打印网格[i][j]”

    for i in range(len(grid)):
        for j in range(len(grid[i])):
            print grid[i][j]
        print '---'
    

    【讨论】:

      【解决方案5】:

      为什么不用while循环来遍历二维列表

      grid = [[2, 6, 8, 6, 9], [2, 5, 5, 5, 0], [1, 3, 8, 8, 7], [3, 2, 0, 6, 9], [2, 1, 4,5,8], [5, 6, 7, 4, 7]]
      i = 0
      while i < len(grid):
          j = 0
          while j < len(grid[0]):
              print (grid[i][j], end=' ')
              j += 1
          print() #new line
          i += 1
      

      【讨论】:

        【解决方案6】:

        如果所有内部列表中的列数相同,则应该像==

        li = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
        for i in range(len(li)):
            for j in range(len(li)):
                print(li[i][j])
            print()
        

        如果你不知道。列,在任何情况下,这都会有帮助 ==

        for i in li:
        for j in i:
            print(j,end = " ")
        print()
        

        如果行和列不同或相同,您也可以使用以下内容:

        li=[[1,2,3,4],[5,6,7],[8,9]]
        for i in range(len(li)):
            for j in range(len(li[i])):
                print(li[i][j],end = " ")
           print()
        

        【讨论】:

          猜你喜欢
          • 2014-02-14
          • 2020-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-18
          • 2014-06-11
          • 1970-01-01
          相关资源
          最近更新 更多