Python 使用else子句筛选(numpy.where)

Python 使用else子句筛选(numpy.where),python,python-3.x,Python,Python 3.x,我肯定有人问过它,它会得到一个“使用生成器理解”的回答,但以防万一它在某个地方的标准库中,而我只是在itertools中找不到它 在Python3.x中,是否有以下功能的替代方案: (x if c else y for c, x, y in zip(cs, xs, ys)) 例如,numpy.where(cs,xs,ys)就是这样做的。嗯,像这样的东西怎么样?(我使用的是Python 2.7.3,但我认为它在这里并不重要。) 这是一个生成器表达式,因此只需将其展开: cs = [True, F

我肯定有人问过它,它会得到一个“使用生成器理解”的回答,但以防万一它在某个地方的标准库中,而我只是在itertools中找不到它

在Python3.x中,是否有以下功能的替代方案:

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

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

嗯,像这样的东西怎么样?(我使用的是Python 2.7.3,但我认为它在这里并不重要。)


这是一个生成器表达式,因此只需将其展开:

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]

numpy有什么问题。在哪里(cs,xs,ys)?如果不是标准语言,请使用适当的库或编写您建议的方法。为了我自己的利益:在For语句中使用zip和itertools.izip有区别吗?因为在Python 3中,我不能(也不需要)使用它。在Python 2中,
ixip()
类似于
zip()
,只是它返回一个迭代器而不是列表。它出现在Python3的
itertools
中,因为该版本中的
zip()
已经做到了这一点。从技术上讲,迭代器对象是生成器对象。我没有费心提及这一切,因为您的问题带有
python-3.x
标签,
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)))