Python 如何获取二维列表的所有矩形子集

Python How to Get All Rectangular Subsets of a 2D list

假设我有一个二维列表

001
111
111

而且我想获取二维列表的所有可能子集,这些子集是矩形的并且包含 grid[0][0] 处的左上角 element/the 元素(我不知道如何描述它)

它应该输出:

0

00

001

0
1

00
11

001
111

0
1
1

00
11
11

001
111
111

你如何获得所有可能的子集?我对如何实现它一无所知。

根据您的解释,我想出了以下解决方案:

import numpy as np

list1=[[0,0,1],[1,1,1],[1,1,1]]

df=pd.DataFrame(list1, columns=['a','b','c'])

list2=[]



for i in range(1,4):
    for j in range(1,4):
        list2.append(df.iloc[:i,:j].to_numpy('int').tolist())

输出:

[[[0]], 
 [[0, 0]],
 [[0, 0, 1]],
 [[0], [1]],
 [[0, 0], [1, 1]],
 [[0, 0, 1], [1, 1, 1]],
 [[0], [1], [1]],
 [[0, 0], [1, 1], [1, 1]],
 [[0, 0, 1], [1, 1, 1], [1, 1, 1]]]

如果你想要更高阶的矩阵,那么你只需要将for i/j in range(2,4)中的4变成你想要的数字即可。

一个简单的方法是:

for i in range(n):
    for j in range(n):
        x = grid[0:i+1]
        for k in x:
            print(k[0:j+1])
        print()
from itertools import product

ints = [
    [0, 0, 1],
    [1, 1, 1],
    [1, 1, 1]
]

def get_slice(ints, x, y):
    rows = ints[0:y+1]
    return list(map(lambda row: row[0:x+1], rows))

x_max = len(ints[0]) # Assuming all rows have the same length
y_max = len(ints)

for coord in product(range(x_max), range(y_max)):
    for row in get_slice(ints, *coord):
        print(*row)
    print()

输出:

0

0
1

0
1
1

0 0

0 0
1 1

0 0
1 1
1 1

0 0 1

0 0 1
1 1 1

0 0 1
1 1 1
1 1 1

get_slice 首先根据参数 yints 进行切片,这只会产生我们感兴趣的 'rows'。然后我们根据参数 x.

我们使用 itertools.product 生成所有可能的 xy 坐标,并将它们用作 get_slice 的参数。