提问人:BingQuan 提问时间:11/3/2023 最后编辑:BingQuan 更新时间:11/3/2023 访问量:51
来自多个 2D 列表的 Python 2D 列表条件映射
Python 2D List Conditional Mapping from Multiple 2D Lists
问:
我有一个列表 A 列表,如下所示
A = [[1, 0, 0],
[1, 1, 1],
[0, 1, 0]]
然后我还有另外两个列表 B 和 C 列表,如下所示:
B = [['a', 'c', 's'],
['y', 'e', 's'],
['u', 'w', 'g']]
C = [['i', 'p', 'u'],
['k', 'l', 'n'],
['h', 'o', 'm']]
我正在尝试执行从 A 到 B 和 C 的映射,并具有值条件:
当“单元格”值为 1 时,引用 B 中相同位置的值,同样引用 C 时为 0。
我试图通过尝试将列表映射到列表来分解问题。但它似乎无处可去。
如何将 A 映射到 B 和 C,以便生成这样的列表列表?
[['a', 'p', 'u'], # 'a' from B; 'p' from C; 'u' from C
['y', 'e', 's'], # 'y' from B; 'e' from B; 's' from B
['h', 'w', 'm']] # 'h' from C; 'w' from B; 'm' from C
答:
3赞
blhsing
11/3/2023
#1
您可以通过先压缩 3 个列表来循环访问它们:
[[a and b or c for a, b, c in zip(*t)] for t in zip(A, B, C)]
1赞
le2dy
11/3/2023
#2
def exchange(value_map, zipped_list):
temp = []
for i, row in enumerate(value_map):
temp_inner = []
for j, obj in enumerate(row):
temp_inner.append(zipped_list[obj][i][j])
temp.append(temp_inner)
return temp
print(exchange(A, [C, B]))
我把它作为功能。
0赞
BingQuan
11/3/2023
#3
编辑:我找到了一种方法:-np.ndenumerate
import numpy as np
for (x,y), e in np.ndenumerate(A):
if e == 1: # or any or more conditions
A[x][y] = B[x][y]
else:
A[x][y] = C[x][y]
上面公认的答案最适合两个条件 (1/0)。
评论