Python中如何创建n×n单词数组?从字典填充方法求助
修正后的n×n数组填充实现
原代码存在的问题
- 空列表
tab直接通过索引赋值会报错,因为没有预先创建行和列结构 - 嵌套while循环与字典遍历的for循环逻辑冲突,导致填充逻辑混乱
- 字典无法通过
provisions[i]这种索引方式访问元素,字典是键值对结构,需转成列表后按索引访问 - 未处理字典元素数量与n²的匹配问题,多余元素未被合理截断
修正代码示例(填充字典键)
provisions = {'cake':'20','eggs':'10','tomatoes':'4','potatoes':'2','bread':'3'} n = 2 # 将字典的键转为有序列表(Python3.7+字典默认保持插入顺序) prov_keys = list(provisions.keys()) # 初始化n行n列的二维数组,默认填充None tab = [[None for _ in range(n)] for _ in range(n)] # 遍历数组每个位置,按顺序填充元素 for i in range(n): for j in range(n): # 计算当前位置对应的元素索引 element_idx = i * n + j # 仅当索引小于字典元素数量时填充 if element_idx < len(prov_keys): tab[i][j] = prov_keys[element_idx] # 打印验证结果 for row in tab: print(row)
运行结果:
['cake', 'eggs'] ['tomatoes', 'potatoes']
扩展:填充键值对
如果需要同时显示键和对应的值,可以修改如下:
provisions = {'cake':'20','eggs':'10','tomatoes':'4','potatoes':'2','bread':'3'} n = 2 # 提取字典的键值对列表 prov_items = list(provisions.items()) tab = [[None for _ in range(n)] for _ in range(n)] for i in range(n): for j in range(n): element_idx = i * n + j if element_idx < len(prov_items): key, value = prov_items[element_idx] tab[i][j] = f"{key}: {value}" for row in tab: print(row)
运行结果:
['cake: 20', 'eggs: 10'] ['tomatoes: 4', 'potatoes: 2']
关键说明
- 使用
[[None for _ in range(n)] for _ in range(n)]正确初始化二维数组,避免浅拷贝问题 - 通过
element_idx = i * n + j将二维坐标转为一维索引,保证按顺序填充字典元素 - 当字典元素数量多于n²时,自动截取前n²个元素;如果元素不足,剩余位置保留
None(可自行修改为默认值,比如空字符串)
内容的提问来源于stack exchange,提问作者Lourna
相关产品推荐
相关产品推荐

