如何在Python中遍历二维列表

4

我有以下列表:

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]]

我使用以下循环来遍历每个元素 ->
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列表的正确方法是什么?


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

20

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

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

在Python中,for循环会在每次迭代中遍历每个项。所以,在每次迭代中,从grid 2-D列表中选择1-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.

1
Python中是否有像C语言中那样的二维列表操作? - DBB
@DBB 你可以将二维列表看作是列表的列表。一个包含其他列表对象的列表对象。 - thefourtheye
对于Python3用户,如果你能通过这里:不要忘记将print, Py2语法更改为print(item, end='') ;) - Maxime Lorant
1
@MaximeLorant 当然,我已经在答案中包含了那个。谢谢 :-) - thefourtheye
@DBB请现在检查答案,我已经包含了一种方法来实现。 - thefourtheye
显示剩余2条评论

2
尝试使用以下方法。您可以执行必要的操作,而不是“打印grid [i] [j]”。
for i in range(len(grid)):
    for j in range(len(grid[i])):
        print grid[i][j]
    print '---'

0
如果所有内部列表中的列数相同,则应该像这样==。
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()

使用另外两个循环而不是中间的循环的原因是什么? - k9-primetime

0
为什么不使用 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

0
为什么不这样做:
for i in grid:
    for j in i:
        print("{}".format(j))
    print("\n")

0

请尝试以下操作...

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

嗨,现在我想执行一些基本的列表操作,是否可以以grid [i] [j]格式打印,因为我需要对列表列进行操作? - DBB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接