我希望在列表的每个现有元素之前插入一个常量元素,即来自:
['foo', 'bar', 'baz']
为:
['a', 'foo', 'a', 'bar', 'a', 'baz']
我尝试过使用列表推导,但我能做的最好的事情就是使用这个语句的数组数组:
[['a', elt] for elt in stuff]
结果如下:
[['a', 'foo'], ['a', 'bar'], ['a', 'baz']]
所以不完全是我想要的。可以使用列表理解来实现吗?万一重要,我使用的是Python 3.5。
答案 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]
这甚至适用于任意长度的嵌套列表。