列表中的元素根据三向条件的真值

时间:2018-02-13 19:56:39

标签: python list conditional-statements

如果我有一个清单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]

这种三重条件似乎不适用于访问列表中的元素。我怎样才能达到同样的效果?

2 个答案:

答案 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]