【问题标题】:Can this generator expression be modified to match for loop result?可以修改此生成器表达式以匹配循环结果吗?
【发布时间】:2014-07-25 20:33:25
【问题描述】:

考虑这个 for 循环:

y = []
for z in ('a', 'b\nc', 'd'):
    y.extend(z.splitlines())

平面列表y不是通过类似方式获得的

y = []
y.extend(z.splitlines() for z in ('a', 'b\nc', 'd'))

可以修改生成器表达式以返回平面列表吗?

【问题讨论】:

    标签: python generator-expression


    【解决方案1】:

    你需要一个双循环:

    y.extend(v for z in ('a', 'b\nc', 'd') for v in z.splitlines())
    

    如果y 开头为空,您不妨将其设为列表推导:

    y = [v for z in ('a', 'b\nc', 'd') for v in z.splitlines()]
    

    你也可以使用itertools.chain.from_iterable():

    from itertools import chain
    
    y.extend(chain.from_iterable(z.splitlines() for z in ('a', 'b\nc', 'd')))
    

    演示:

    >>> from itertools import chain
    >>> [v for z in ('a', 'b\nc', 'd') for v in z.splitlines()]
    ['a', 'b', 'c', 'd']
    >>> y = []
    >>> y.extend(v for z in ('a', 'b\nc', 'd') for v in z.splitlines())
    >>> y
    ['a', 'b', 'c', 'd']
    >>> y = []
    >>> y.extend(chain.from_iterable(z.splitlines() for z in ('a', 'b\nc', 'd')))
    >>> y
    ['a', 'b', 'c', 'd']
    

    【讨论】:

    • 我什至没有时间阅读这个问题,你已经给出了答案!
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2011-09-20
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多