我有一个 list
a = ['a', 'b', 'c']
给定长度,我想在要获取的每个项目之后插入某个元素 'x'
ax = ['a', 'x', 'b', 'x', 'c', 'x']
由于元素很大,我不想做很多pop
或子列表。
有什么想法吗?
最佳答案
由于列表很大,最好的方法是使用生成器,就像这样
def interleave(my_list, filler):
for item in my_list:
yield item
yield filler
print list(interleave(['a', 'b', 'c'], 'x'))
# ['a', 'x', 'b', 'x', 'c', 'x']
或者你可以像这样返回一个链式迭代器
from itertools import chain, izip, repeat
def interleave(my_list, filler):
return chain.from_iterable(izip(my_list, repeat(filler)))
repeat(filler)
返回一个给filler
无限次的迭代器。izip(my_list, repeat(filler))
返回一个迭代器,一次从my_list
和repeat(filler )
。所以,list(izip(my_list, repeat(filler)))
的输出看起来像这样[('a', 'x'), ('b', 'x'), ('c', 'x')]
现在,我们所要做的就是展平数据。因此,我们将
izip
的结果与chain.from_iterable
链接起来,一次从 iterable 中给出一个值。
关于python - 内存高效填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22831271/