使用else子句过滤(numpy.where)

时间:2013-01-22 15:11:45

标签: python python-3.x

我确信它已被问及它会“只使用生成器理解!”响应,但以防它在某个地方的标准库中,我只是在itertools中找不到它...

在Python 3.x中,是否有一个功能替代:

(x if c else y for c, x, y in zip(cs, xs, ys))

例如,numpy.where(cs, xs, ys)就是这样做的。

2 个答案:

答案 0 :(得分:2)

这是一个生成器表达式,所以只需打开它:

cs = [True, False, True]
xs = [1, 2, 3]
ys = [10, 20, 30]

def generator(cs, xs, ys):
    for c, x, y in zip(cs, xs, ys):
        yield x if c else y

print(list(x if c else y for c, x, y in zip(cs, xs, ys)))
print(list(generator(cs, xs, ys)))

输出:

[1, 20, 3]
[1, 20, 3]

答案 1 :(得分:1)

嗯,这个怎么样? (我在Python 2.7.3中,但我认为这不重要。)

>>> import itertools as it
>>> a=[1,2,3]
>>> b=[10,20,30]
>>> cond=[True, False, True]
>>> func=lambda c,x,y: x if c else y
>>> test=it.starmap(func, it.izip(cond,a,b))
>>> test.next()
1
>>> test.next()
20
>>> test.next()
3