在Python中对列表应用if-else一行程序
我有一个数组在Python中对列表应用if-else一行程序,python,Python,我有一个数组y,它的值为0或1。然后我有一个数组yp,它取0到1之间的值。这两个数组的长度相同 如果y中的条目为1,则我希望将相应的yp附加到列表中,否则我希望附加1-yp: y = [1,1,1,0,0] yp = [0.1, 0.2, 0.3, 0.4, 0.5] x = [] for idx, i in enumerate(y): if i: x.append(yp[idx]) else: x.append(1-yp[idx]) 有没有
y
,它的值为0或1。然后我有一个数组yp
,它取0到1之间的值。这两个数组的长度相同
如果y
中的条目为1,则我希望将相应的yp
附加到列表中,否则我希望附加1-yp
:
y = [1,1,1,0,0]
yp = [0.1, 0.2, 0.3, 0.4, 0.5]
x = []
for idx, i in enumerate(y):
if i:
x.append(yp[idx])
else:
x.append(1-yp[idx])
有没有一种用Python编写的更短的方法,也许没有for循环?如果我理解正确的话,也许您正在寻找类似的东西
for idx, i in enumerate(y):
x.append(yp[idx]) if i else x.append(1-yp[idx])
更像是三元操作方法
参考资料:您要求理解列表(您称之为“一行”?),例如:
y = [1,1,1,0,0]
yp = [0.1, 0.2, 0.3, 0.4, 0.5]
l=[yp[i] if y[i]==1 else 1-yp[i] for i in range(len(y))]
我会给你:
>>> l
[0.1, 0.2, 0.3, 0.6, 0.5]
您可以使用列表理解同时迭代两个列表:
>>> y = [1,1,1,0,0]
>>> yp = [0.1, 0.2, 0.3, 0.4, 0.5]
>>> [b if a else 1 - b for a, b in zip(y, yp)]
[0.1, 0.2, 0.3, 0.6, 0.5]
如果列表很长,有一种更有效的方法使用numpy:
y,yp=map(np.asarray,(y,yp)#转换为数组
x=y*yp+(1-y)*(1-yp)
上述代码解释如下:
:生成与a=y*yp
(和y
)长度相同的数组,其中yp
,其中1*yp
和y=1
,其中0
y=0
:生成一个具有b=(1-y)*(1-yp)
的数组,其中1-yp
和y=0
其中0
y=1
是成对的和,并产生您的预期结果a+b