[英]How can I efficiently translate a large, non-rectangular 2D list to an even larger rectangular 2D array?
[英]Python How to Get All Rectangular Subsets of a 2D list
假設給了我一個 2D 列表
001
111
111
我想獲取二維列表的所有可能子集,它們是矩形並包含左上角元素/ grid[0][0]
處的元素(我不知道如何描述它)
它應該是 output:
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())
Output:
[[[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]]]
如果您希望擁有更高階的矩陣,那么您只需將 4 更改為您希望for i/j in range(2,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()
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))
for row in get_slice(ints, 2, 1):
print(*row)
Output:
0 0 1
1 1 1
get_slice
首先根據參數y
對ints
進行切片,這只會產生我們感興趣的“行”。然后我們根據參數x
對每一行進行切片。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.