在每 2 个元素之后插入列表中的元素

insert element in a list after every 2 element

我有这个代码:

l = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

def add(l, n):
    lret = l.copy()
    i = n
    while i <= len(lret):
      lret.insert(i, 0.0)
      i += (n+1)
    return lret

lret = add(l,2)

print(lret)

有没有办法让 add() 函数成为单行函数?

您可以使用 zip() 构建包含原始列表中的 n 元素和添加元素的元组,然后使用 chain.from_iterable() 将这些元组展平到最终列表中:

from itertools import repeat, chain
def add(lst, n):
    return list(chain.from_iterable(zip(*(lst[s::n] for s in range(n)), repeat(0.0))))

这输出:

[1.0, 2.0, 0.0, 3.0, 4.0, 0.0, 5.0, 6.0, 0.0]

如果你希望整个块在一行中,可能的解决方案:

return [x for y in (l[i:i + n] + [0.0] * (i < len(l) - n + 2) for
                   i in xrange(0, len(l), n)) for x in y]

给出相同的输出

[1.0, 2.0, 0.0, 3.0, 4.0, 0.0, 5.0, 6.0, 0.0]

找到另一种方法:

def add(l,n=2):
    return [item for sublist in [(e,) if i % n == 0 or i == 0 else (e, 0.0) for i, e in enumerate(l)] for item in sublist]

[1.0, 2.0, 0.0, 3.0, 4.0, 0.0, 5.0, 6.0, 0.0]