如何实现Python二维列表基于多列表的条件映射?
二维列表条件映射实现方案
现有三个3×3的二维列表A、B、C,需要根据A中每个单元格的值进行映射:当值为1时,取用B中相同位置的元素;当值为0时,取用C中相同位置的元素,最终生成目标二维列表。
原始数据定义:
A = [[1, 0, 0], [1, 1, 1], [0, 1, 0]] B = [['a', 'c', 's'], ['y', 'e', 's'], ['u', 'w', 'g']] C = [['i', 'p', 'u'], ['k', 'l', 'n'], ['h', 'o', 'm']]
方法一:嵌套列表推导式(简洁高效)
利用Python的列表推导式可以一行完成映射,这是最常用的写法:
result = [[B[i][j] if A[i][j] == 1 else C[i][j] for j in range(len(A[i]))] for i in range(len(A))]
逻辑说明:外层循环遍历每一行的索引i,内层循环遍历该行每个元素的索引j,通过三元表达式判断A[i][j]的值,选择对应位置的B或C元素,最终生成结果列表。
方法二:嵌套循环(直观易懂)
如果对列表推导式不太熟悉,可以用嵌套循环逐步构建结果,逻辑更清晰:
result = [] # 遍历每一行 for i in range(len(A)): current_row = [] # 遍历当前行的每个元素 for j in range(len(A[i])): if A[i][j] == 1: current_row.append(B[i][j]) else: current_row.append(C[i][j]) result.append(current_row)
逻辑说明:先初始化空的结果列表,逐行处理原始数据,每行内逐个判断元素值,将对应位置的B或C元素添加到当前行列表,最后把构建好的行添加到结果列表中。
验证结果:
运行上述代码后,打印result会得到目标结构:
print(result) # 输出: # [['a', 'p', 'u'], ['y', 'e', 's'], ['h', 'w', 'm']]
内容的提问来源于stack exchange,提问作者BingQuan
相关产品推荐
相关产品推荐

