Python:列表中的空格(带0的空格)

时间:2016-11-09 04:27:36

标签: python list

我正在尝试创建一个返回此列表中空插槽的函数:

grid = [[0,0,0,4],[0,0,4,2],[2,4,4,2],[0,8,4,2]] 

在这种情况下,空插槽是带有零的插槽。

这是我的计划:

def empty_slots():
    lst = []
    for i in grid:
        for j in grid:
            if j == 0:
                lst = lst + [(i,j)]
    return lst

但是,当我运行此程序时,我得到一个空列表[]。该函数应输出:[(0,0), (0,1), (0,2), (1,0), (1,1), (3,0)]。注意:我使用的是Python 2.7。

2 个答案:

答案 0 :(得分:1)

for i in grid:遍历grid 中的项目,它不会迭代其索引。但是,当您通过内置enumerate函数迭代迭代项时,可以获取索引:

def empty_slots(grid):
    return [(i, j) for i, row in enumerate(grid) 
        for j, v in enumerate(row) if not v]

grid = [[0,0,0,4],[0,0,4,2],[2,4,4,2],[0,8,4,2]]

print(empty_slots(grid))

<强>输出

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (3, 0)]

使用“传统”for循环而不是列表理解,这是同样的事情。

def empty_slots(grid):
    zeros = []
    for i, row in enumerate(grid):
        for j, v in enumerate(row):
            if v == 0:
                zeros.append((i, j))
    return zeros

在此版本中,我使用v == 0的显式测试而不是not v;如果v是任何“假”值,例如0,或者空字符串,列表,元组,集合或字典,则后者将测试为真。

您不需要 enumerate来执行此操作。你可以这样做:

def empty_slots(grid):
    zeros = []
    for i in range(len(grid)):
        row = grid[i]
        for j in range(len(row)):
            if row[j] == 0:
                zeros.append((i, j))
    return zeros

然而,在迭代中直接迭代项目被认为更Pythonic,所以在实际应用时通常会避免这种情况:

for i in range(len(grid)):

有时你需要做那种事情,但通常这样的代码是一种更好的方法。 :)

答案 1 :(得分:1)

在列表理解中:

var arr [];