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

时间:2016-09-07 17:22:30

标签: python list python-3.x list-comprehension

我希望在列表的每个现有元素之前插入一个常量元素,即来自:

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

为:

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

我尝试过使用列表推导,但我能做的最好的事情就是使用这个语句的数组数组:

[['a', elt] for elt in stuff]

结果如下:

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

所以不完全是我想要的。可以使用列表理解来实现吗?万一重要,我使用的是Python 3.5。

3 个答案:

答案 0 :(得分:9)

添加另一个循环:

[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))

答案 1 :(得分: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 :(得分:1)

你已经拥有

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

您可以使用

展平它
[item for sublist in l for item in sublist]

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