如果我有一个清单L
L = [0,1,2,3,4,5,6,7,8,9]
我有一个真值T列表
T = [1,0,1,0,1,0,1,0,1,0]
我可以访问L中与T中的值对应的元素。
例如
L[T == 1] = [0,2,4,6,8]
L[T == 0] = [1,3,5,7,9]
我的问题是: 我有两个真相列表T1和T2,比如说:
T1 = [0,0,1,0,0,1,0,0,1,0]
T2 = [1,0,1,0,1,0,1,0,1,0]
我希望L中的元素可以通过
访问L[T1 == T2 == 1] = [2,8]
或换句话说
L[T1 == 1 and T2 == 1] = [2,8]
这种三重条件似乎不适用于访问列表中的元素。我怎样才能达到同样的效果?
答案 0 :(得分:2)
这是numpy
闪耀的地方:
import numpy as np
L = np.array([0,1,2,3,4,5,6,7,8,9])
T1 = [0,0,1,0,0,1,0,0,1,0]
T2 = [1,0,1,0,1,0,1,0,1,0]
mask = np.logical_and(T1, T2)
print(L[mask].tolist())
# [2, 8]
答案 1 :(得分:2)
正如其他人在评论中指出的那样,从Python的角度来看,你所做的事情并没有任何意义。但是,在另一个列表中使用一个列表作为掩码是相当常见的,并且很容易做到。
你可以简单地做
masked = [x for x, t1, t2 in zip(L, T1, T2) if t1 and t2]