gpt4 book ai didi

python - 如果所有值(在该行或列中)都为 None,则从二维列表中删除行或列

转载 作者:太空狗 更新时间:2023-10-30 00:47:01 27 4
gpt4 key购买 nike

我有一个网格(6 行,5 列):

grid = [
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
]

我增加了网格,它可能会变成类似这样的东西:

grid = [
[{"some" : "thing"}, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, {"something" : "else"}, None],
[None, {"another" : "thing"}, None, None, None],
[None, None, None, None, None],
]

我想删除包含所有 None 的整个行和列。所以在之前的代码中,grid 会变成:

grid = [
[{"some" : "thing"}, None, None],
[None, None, {"something" : "else"}],
[None, {"another" : "thing"}, None],
]

我删除了第 1、2、5 行(零索引)和第 2 列和第 4 列。

我现在删除行的方式:

for row in range(6):
if grid[row] == [None, None, None, None, None]:
del grid[row]

我还没有合适的方法来删除 None 列。有没有一种“pythonic”的方式来做到这一点?

最佳答案

这不是最快的方法,但我认为它很容易理解:

def transpose(grid):
return zip(*grid)

def removeBlankRows(grid):
return [list(row) for row in grid if any(row)]

print removeBlankRows(transpose(removeBlankRows(transpose(grid))))

输出:

[[{'some': 'thing'}, None, None],
[None, None, {'something': 'else'}],
[None, {'another': 'thing'}, None]]

工作原理:我使用 zip 编写一个转置行和列的函数。第二个函数 removeBlankRows 删除所有元素均为 None 的行(或在 bool 上下文中计算为 false 的任何内容)。然后为了执行整个操作,我转置网格,删除空行(原始数据中的列),再次转置,然后删除空行。

如果仅去除 None 而不是其他评估为 false 的东西很重要,请将 removeBlankRows 函数更改为:

def removeBlankRows(grid):
return [list(row) for row in grid if any(x is not None for x in row)]

关于python - 如果所有值(在该行或列中)都为 None,则从二维列表中删除行或列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1983902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com