在列表的每个元素之前插入一个元素

5
我想在列表的每个现有元素之前插入一个常量元素,即从以下内容开始:
['foo', 'bar', 'baz']

to:

['a', 'foo', 'a', 'bar', 'a', 'baz']

我尝试使用列表推导式,但我能做到的最好的事情是使用以下语句得到一个数组的数组:
[['a', elt] for elt in stuff]

这将导致如下结果:
[['a', 'foo'], ['a', 'bar'], ['a', 'baz']]

所以并不完全是我想要的。可以使用列表推导式来实现吗?以防万一,我正在使用Python 3.5。
3个回答

12

再加一个循环:

[v for elt in stuff for v in ('a', elt)]

如果你需要的是可迭代版本而不是完整列表,则可以使用itertools.chain.from_iterable()zip()itertools.repeat()组合使用:

from itertools import chain, repeat
try:
    # Python 3 version (itertools.izip)
    from future_builtins import zip
except ImportError:
    # No import needed in Python 3

it = chain.from_iterable(zip(repeat('a'), stuff))

3
一个简单的生成器函数在这里也很有效:
def add_between(iterable, const):
    # TODO: think of a better name ... :-)
    for item in iterable:
        yield const
        yield item

list(add_between(['foo', 'bar', 'baz'], 'a')

这样可以避免嵌套列表推导式,而且很容易阅读和理解,唯一的代价是略微啰嗦了一点。


2

你已经拥有

   l =  [['a', 'foo'], ['a', 'bar], ['a', 'baz']]

您可以使用“flatten”命令对其进行压缩。
[item for sublist in l for item in sublist]

这甚至适用于任意长度的嵌套列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接