我确信它已被问及它会“只使用生成器理解!”响应,但以防它在某个地方的标准库中,我只是在itertools中找不到它...
在Python 3.x中,是否有一个功能替代:
(x if c else y for c, x, y in zip(cs, xs, ys))
例如,numpy.where(cs, xs, ys)
就是这样做的。
答案 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)
>>> 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