For Python中的循环和else语句

Cho*_*key 2 python jinja2

我在jinja2模板框架中为python使用了一些条件for循环.我想知道是否有办法在jinja2之外做同样的事情,类似于:

{% for i in a if i == 1 %}
  {{ i }}
{% else %}
  no items
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

当我在普通的'蟒蛇'中尝试这个时,它不喜欢它

>>> for i in a if i == 1:

SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我希望能做的是这样的:

for i in a if i == 1:
    print i
else:
    print 'no matches found'
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 5

你已经非常接近了,所需要的只是一个列表理解,它形成一个只有值a等于1的列表.

在python中,该for..else语句也是有效的.

for i in [x for x in a if x == 1]:
    print i
else:
    print 'no matches found'
Run Code Online (Sandbox Code Playgroud)

这将打印所有的值a1,除非没有被发现.然后它打印no matches found

正如davidism所提到的,为了防止对整个列表进行中间评估,您可以使用生成器而不是LC:

for i in (x for x in a if x == 1):
    print i
else:
    print 'no matches found'
Run Code Online (Sandbox Code Playgroud)