如何将数组十字相邻元素按索引存入字典?
解决方案
给定数组:
arr =[[0, 2, 3], [2, 0, 4], [3, 4, 0]]
要完成字典的填充,只需在遍历每个索引时,检查当前位置的上下左右四个方向是否在数组的有效范围内,把合法位置的元素收集起来即可。修改后的代码如下:
from collections import defaultdict arr =[[0, 2, 3], [2, 0, 4], [3, 4, 0]] d = defaultdict(list) rows = len(arr) cols = len(arr[0]) if rows > 0 else 0 for i in range(rows): for j in range(cols): # 检查上方元素(i-1行,j列) if i - 1 >= 0: d[f"{i}{j}"].append(arr[i-1][j]) # 检查下方元素(i+1行,j列) if i + 1 < rows: d[f"{i}{j}"].append(arr[i+1][j]) # 检查左侧元素(i行,j-1列) if j - 1 >= 0: d[f"{i}{j}"].append(arr[i][j-1]) # 检查右侧元素(i行,j+1列) if j + 1 < cols: d[f"{i}{j}"].append(arr[i][j+1]) print(d)
代码说明
- 先定义数组的总行数
rows和总列数cols,避免重复计算索引边界 - 对每个位置
(i,j),依次判断四个方向的索引是否合法:- 上方:行索引
i-1不能小于0 - 下方:行索引
i+1不能大于等于总行数 - 左侧:列索引
j-1不能小于0 - 右侧:列索引
j+1不能大于等于总列数
- 上方:行索引
- 合法方向对应的元素直接追加到字典对应键的列表中
运行结果
defaultdict(<class 'list'>, {'00': [2, 2], '01': [0, 0, 3], '02': [0, 4], '10': [0, 3, 0], '11': [2, 4, 2, 4], '12': [3, 0, 0], '20': [2, 4], '21': [2, 0, 3], '22': [4, 4]})
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

