unutbu 做得很好。我建议一个没有where 的等价物(但无论如何都有numpy)
import numpy as np
s1=[2,1,2,5,4,6]
s2=[1,2,4,5,7,8]
s3=[0.1,0.4,0.5,0.6,0.1,0.1]
res = [xv if c else yv for (c,xv,yv) in zip([si1<si2
for si1,si2 in zip(s1,s2)], list(np.arcsin(s3)), list(np.arccos(s3)))]
如果你打印zip(),你会得到这个列表
>>>
[(False, 0.1001674211615598, 1.4706289056333368), (True, 0.41151684606748806, 1.1592794807274085), (True, 0.52359877559829893, 1.0471975511965979), (False, 0.64350110879328437, 0.9272952180016123), (True, 0.1001674211615598, 1.4706289056333368), (True, 0.1001674211615598, 1.4706289056333368)]
拿第一项(False, 0.1001674211615598, 1.4706289056333368):2<1确实是假的。所以你将1.4706289056333368 作为res 中的第一个值。
结果是
>>> res
[1.4706289056333368, 0.41151684606748806, 0.52359877559829893,
0.9272952180016123, 0.1001674211615598, 0.1001674211615598]