Python:二维数组与一维数组匹配生成0-1二维数组的实现疑问
解决二维数组与一维数组对应位置匹配标记问题
我来帮你搞定这个需求~首先明确你的核心需求:把二维数组2d_arr里的每个子数组,和一维数组arr按对应索引位置逐一比对,匹配就标记为1,不匹配或者子数组长度不够的位置就标记为0,同时要把原arr作为结果的第一行输出。
你原来代码的问题
你之前写的arr[i]是错误的——这里的i是二维数组中子数组的索引,而我们需要的是和arr的每个位置j去比对;另外还要处理子数组长度小于arr长度的情况(这时候超出子数组长度的位置都要填0,避免索引越界)。
完整解决方案代码
先看最直观的循环实现,方便理解:
# 假设你的元素是字符串类型,先定义好数组 2d_arr = [['a','b','c','d'],['a','b'],['c','d'],['a','f']] arr = ['a','w','b','x'] # 初始化结果列表,先把原arr作为第一行加入 result = [arr] # 遍历二维数组的每个子数组 for sub_arr in 2d_arr: current_row = [] # 遍历一维数组的每个位置索引j for j in range(len(arr)): # 判断:j在子数组范围内,且对应元素相等则为1,否则为0 if j < len(sub_arr) and sub_arr[j] == arr[j]: current_row.append(1) else: current_row.append(0) result.append(current_row) # 打印输出结果 for line in result: print(line)
运行这段代码后,输出完全符合你的期望:
['a', 'w', 'b', 'x'] [1, 0, 1, 0] [1, 0, 1, 0] [0, 0, 0, 0] [1, 0, 0, 0]
简化版:用列表推导式实现
如果想让代码更简洁,可以用Python的列表推导式一行搞定结果生成:
2d_arr = [['a','b','c','d'],['a','b'],['c','d'],['a','f']] arr = ['a','w','b','x'] result = [arr] + [[1 if j < len(sub) and sub[j] == arr[j] else 0 for j in range(len(arr))] for sub in 2d_arr] for line in result: print(line)
这段代码的逻辑和上面的循环完全一致,只是写法更紧凑。
内容的提问来源于stack exchange,提问作者Nilson Tang
相关产品推荐
相关产品推荐

