当前位置:  开发笔记 > 编程语言 > 正文

Python:对非空列表的迭代,没有if-clause出现空.为什么?

如何解决《Python:对非空列表的迭代,没有if-clause出现空.为什么?》经验,为你挑选了1个好方法。

如何在没有过滤和没有聚合(sum()等等)的非空序列上产生迭代器,什么都不产生?

考虑一个简单的例子:

sequence = ['a', 'b', 'c']
list((el, ord(el)) for el in sequence)

[('a', 97), ('b', 98), ('c', 99)]按预期产生.

现在,只需将ord(el)out 换成一个表达式,该表达式使用某个生成器的第一个值(...).next()- 原谅人为的例子:

def odd_integers_up_to_length(str):
    return (x for x in xrange(len(str)) if x%2==1)

list((el, odd_integers_up_to_length(el).next()) for el in sequence)

这产生了[].是的,空单.没有('a',东西)元组.没有.

但我们不是过滤,聚合或减少.n没有过滤或聚合的对象上的生成器表达式必须产生n对象,对吗?这是怎么回事?



1> Devin Jeanpi..:

odd_integers_up_to_length(el).next() 会引发StopIteration,它不会被捕获,但会被捕获到其中的生成器表达式,停止它而不会产生任何结果.

当值为'a'时,查看第一次迭代:

>>> odd_integers_up_to_length('a').next()
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有