说我有这样的清单:
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
我怎么能
b = [[1 ,2 ,3], ['cat'], [4, 5, 6], ['cat']]
作为输出?
答案 0 :(得分:3)
我更喜欢使用itertools来做这样的事情:
>>> import itertools as it
>>> a = [[1, 2, 3], [4, 5, 6]]
>>> filler = ['cat']
>>> list(it.chain.from_iterable(it.izip(a, it.repeat(filler))))
[[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
答案 1 :(得分:3)
我喜欢这里发布的基于itertools
的解决方案,但这里的方法不需要列表推导或itertools
,我敢打赌它超级快。
new_list = [filler] * (len(a) * 2)
new_list[0::2] = a
答案 2 :(得分:2)
不是pythonic但似乎有用。
list = [[1, 2, 3], [4, 5, 6]]
result = []
for e in list:
result.append(e)
result.append(['cat'])
result.pop()
答案 3 :(得分:2)
这是一个想法:
import itertools
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
print list(itertools.chain.from_iterable(zip(a, [filler] * len(a))))
输出:
[[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
答案 4 :(得分:1)
类似于使用itertools.islice()
和itertools.cycle()
:
cycle()
用于重复某个项目,并使用islice()
将重复次数减少到len(a)
,然后使用izip()
或简单zip()
a
和islice()
返回的迭代器,
这将返回元组列表。
然后,您可以使用itertools.chain()
将其展平。
In [72]: a
Out[72]: [[1, 2, 3], [4, 5, 6]]
In [73]: b
Out[73]: ['cat']
In [74]: cyc=islice(cycle(b),len(a))
In [75]: lis=[]
In [76]: for x in a:
lis.append(x)
lis.append([next(cyc)])
....:
In [77]: lis
Out[77]: [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
或:
In [108]: a
Out[108]: [[1, 2, 3], [4, 5, 6]]
In [109]: b
Out[109]: ['cat']
In [110]: cyc=islice(cycle(b),len(a))
In [111]: list(chain(*[(x,[y]) for x,y in izip(a,cyc)]))
Out[111]: [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
答案 5 :(得分:0)
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
out = []
for i in a:
out.append(i)
out.append(filler)
答案 6 :(得分:0)
result = [si for i in zip(a, [filler]*len(a)) for si in i]
答案 7 :(得分:0)
尝试这个,作为一个单行:
from operator import add
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
reduce(add, ([x, filler] for x in a))
> [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
甚至更简单,不使用reduce
:
sum(([x, filler] for x in a), [])
> [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
两个解决方案都是这样做的:首先,创建一个[element, filler]
的生成器,然后展平生成的对流。为了提高效率,第一步是使用生成器来执行,以避免不必要的中间列表。
<强>更新强>
这篇文章是一个教科书的例子,说明为什么不能在网上论坛中提供巨魔。看评论,看看我的意思。最好不要理会这个巨魔。
答案 8 :(得分:-1)
python 3.2
a = [[1, 2, 3], [4, 5, 6]]
b = ['cat']
_=[a.insert(x,b) for x in range(1,len(a)*2,2)]