簡體   English   中英

在 Python 的嵌套列表中搜索 || 如何匹配 1 索引嵌套列表和 2 索引嵌套列表

[英]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] ..]

這是我試圖 map 的目標

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

最終的 output 將是針對每個坐標的計數

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM