在列表中已有的每个项目之间添加项目

时间:2011-05-07 11:08:33

标签: python list insert

  

可能重复:
  python: most elegant way to intersperse a list with an element

假设我有以下列表:

['a','b','c','d','e']

如何在此列表中的每个项目之间添加新项目(在本例中为-),以便我的列表如下所示?

['a','-','b','-','c','-','d','-','e']

感谢。

8 个答案:

答案 0 :(得分:20)

这是一个我希望非常快的解决方案 - 我相信所有这些操作都将以优化的c速度发生。

def intersperse(lst, item):
    result = [item] * (len(lst) * 2 - 1)
    result[0::2] = lst
    return result

测试:

>>> l = [1, 2, 3, 4, 5]
>>> intersperse(l, '-')
[1, '-', 2, '-', 3, '-', 4, '-', 5]

答案 1 :(得分:18)

>>> list('-'.join(ls))
['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e']
>>> 

答案 2 :(得分:7)

list = ['a', 'b', 'c', 'd', 'e']
result = []
for e in list:
    result.append(e)
    result.append('-')
result.pop()

似乎有用

答案 3 :(得分:6)

这适用于任何列表元素:

>>> sep = '-'
>>> ls = [1, 2, 13, 14]
>>> sum([[i, '-'] for i in ls], [])[:-1]
[1, '-', 2, '-', 13, '-', 14]

答案 4 :(得分:2)

以下内容将在列表中的每个元素之间添加“separator”元素:

seq = ['a','b','c','d','e']

def tween(seq, sep):
    return reduce(lambda r,v: r+[sep,v], seq[1:], seq[:1])

print tween(seq, '-')

输出:

['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e']

FWIW,这是一个类似的Usenet comp.lang.python组中名为Custom string joining的帖子,可能会让您感兴趣。

答案 5 :(得分:2)

li = ['a','b','c','d','e']
for i in xrange(len(li)-1,0,-1):
    li[i:i] = '-'

from operator import concat
seq = ['a','b','c','d','e']
print reduce(concat,[['-',x] for x in seq[1:]],seq[0:1])

li = ['a','b','c','d','e']
newli = li[0:1]
[ newli.extend(('-',x)) for x in li[1:]]

答案 6 :(得分:1)

我认为这更优雅/ pythonic以及一般。如果您不习惯功能风格,可能会发现它的可读性较低:

li = ['a','b','c','d','e']

from operator import add
reduce(add, [(elt, "-") for elt in li])[:-1]

如果您愿意,可以使用lambda a,b:a + b而不是operator.add。

答案 7 :(得分:1)

改编this answer to a similar question

>>> input = ['a', 'b', 'c', 'd', 'e']
>>> sep = ['-'] * len(input)
>>> list(sum(zip(input, sep), ())[:-1])
['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e']

Another answer to the same question使用itertools和略微修改的分隔符列表来执行此操作:

>>> import itertools
>>> sep = ['-'] * (len(input) - 1)
>>> list(it.next() for it in itertools.cycle((iter(input), iter(sep))))
['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e']