[英]Searching within Nested lists in Python || How do I match a 1-index nested list, with a 2-index nested list
這是我要解決的問題:
coord = [[0, 0], [1, 0], [1, 1], [2, 0], [2, 1], [2, 1], [2, 2] ..]
new_arr = [[[0, 0], 1], [[1, 0], 1], [[1, 1], 1], [[2, 0], 1], [[2, 1], 2], [[2, 2], 1] ..]
[0, 0][0, 1][0, 2]
[1, 0][1, 1][1, 2]
[2, 0][2, 1][2, 2]
1 0 0
1 1 0
1 2 1
------ 澄清--------
目標是生成這個數字平方(計數),它是 new_arr 中的第二個元素。 例如 [[0, 0], 1], [[1, 0], 1],可以解釋為坐標 [0,0] 的值 1 和坐標 [1,0] 的值 1
第一個列表(坐標)只是坐標的 map。 目標是獲取對應的值(來自new_arr)並以正方形的形式顯示。 希望這一點得到澄清。 output 將是格式的網格
1 0 0
1 1 0
1 2 1
對於 N 的問題(我只是取了一個樣本值 3)。 實際用例是當用戶輸入 integer,比如 6,結果是 6 X 6 的正方形。 計數是關於到達特定單元格的方式的國際象棋移動計算(僅兩個移動 (i+1, j) & (i+1, j+1).......從 (0,0) 開始
邏輯並不完全清楚,但看起來你想要 map 坐標的笛卡爾積上的new_arr
值:
N = 3 # how this is determined is unclear
d = {tuple(l):x for l, x in new_arr}
# {(0, 0): 1, (1, 0): 1, (1, 1): 1, (2, 0): 1, (2, 1): 2, (2, 2): 1}
out = [d.get((i,j), 0) for i in range(N) for j in range(N)]
# [1, 0, 0, 1, 1, 0, 1, 2, 1]
# 2D variant
out2 = [[d.get((i,j), 0) for j in range(N)] for i in range(N)]
# [[1, 0, 0],
# [1, 1, 0],
# [1, 2, 1]]
import numpy as np
N = 3
a = np.zeros((N,N), dtype=int)
# get indices and values
idx, val = zip(*new_arr)
# assign values (option 1)
a[tuple(zip(*idx))] = val
# assign values (option 2)
a[tuple(np.array(idx).T.tolist())] = val
print(a)
output:
array([[1, 0, 0],
[1, 1, 0],
[1, 2, 1]])
使用numpy
:
import numpy as np
i = []
coord = [[0, 0], [1, 0], [1, 1], [2, 0], [2, 1], [2, 1], [2, 2]]
new_arr = [[[0, 0], 1], [[1, 0], 1], [[1, 1], 1], [[2, 0], 1], [[2, 1], 2], [[2, 2], 1]]
result = np.zeros([coord[-1][0] + 1, coord[-1][1] + 1])
for i in new_arr:
for j in coord:
if i[0] == j:
result[j[0],j[1]]= i[1]
print(result)
Output:
[[1. 0. 0.]
[1. 1. 0.]
[1. 2. 1.]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.