在每个列表元素后插入一个零

Insert a zero after every list elements

我有一个列表

[-1. -1. -1. -1. -1.  1.  1.  1.  1.  1. -1. -1. -1. -1. -1.  1.  1.  1.
 1.  1.  1.  1.  1.  1.  1. -1. -1. -1. -1. -1.]

我想在每个数字后插入一个零:

[-1. 0. -1. 0. -1. 0. -1. 0. -1. 0.  1. 0. 1. 0.  1. 0. 1. (...) 0.]

我目前的尝试是:

S = np.zeros(P*len(bits))

S0=P/2*[A]+P/2*[-A] 
S1=P/2*[-A]+P/2*[A] 

for i in range(len(bits)):
    if bits[i]==0:
        S[i*P:(i+1)*P]= S0
    else:
        S[i*P:(i+1)*P]= S1

我会使用简单的 zip 和列表理解,就像这样

>>> data = [-1, -1, -1, -1, -1, 1]
>>> [item for items in zip(data, [0] * len(data)) for item in items]
[-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1, 0]

或使用 itertools.chainitertools.izipitertools.repeat

>>> from itertools import chain, izip, repeat
>>> list(chain.from_iterable(izip(data, repeat(0, len(data)))))
[-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1, 0]

第二个非常有效,内存明智,如果你正在处理一个很长的列表。

怎么样:

In [6]: l = [-1., -1., -1., -1., -1.,  1.,  1.]

In [7]: sum(([el, 0] for el in l), [])
Out[7]: [-1.0, 0, -1.0, 0, -1.0, 0, -1.0, 0, -1.0, 0, 1.0, 0, 1.0, 0]

在这里,我使用 sum() 连接生成器表达式生成的 [-1., 0][-1., 0] 等。

试试这个:

>>> import itertools
>>> a=[-1, -1, -1, -1, -1, 1]
>>> list(itertools.chain(*([x,0] for x in a)))
[-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1, 0]

来自基本方法:

>>> my_list = []
>>> for x in a:
...     my_list.append(x)
...     my_list.append(0)
... 
>>> my_list
[-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1, 0]

这里的方法与其他答案略有不同。先做一个生成器:

def insert_every(L, char, every):
    '''generates items composed of L-items
    interweaved with char every-so-many items'''
    for i in range(len(L)):
        #all the items in `L` are yielded eventually
        yield L[i]
        #char is yielded next if the current L item number is divisible by `every`
        if (i+1) % every == 0:
            yield char

然后用它吐出你的新列表:

newL = list(insert_every(oldL, 0, 1))

或:

newL = [i for i in insert_every(oldL, 0, 1)]

这是灵活的;你也可以用它来吐出 dicttuple:

tup = tuple(insert_every(oldL, 0, 1))
dic = {i:i for i in insert_every(oldL, 0, 1)} #kind of useless but you get the idea

我觉得这样做可以更明确地说明您在做什么,并且更灵活,以后可重用,并且非常便于记忆。另外,您还可以使用发电机,这总是很麻烦。

你可以用列表理解来做到这一点:

lst = [-1, -1, -1, -1, -1,  1,  1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1, -1, -1, -1, -1, -1,]

lst = [0 if i % 2 else e for i,e in enumerate(lst)]

print(lst)

输出:

[-1, 0, -1, 0, -1, 0, 1, 0, 1, 0, -1, 0, -1, 0, -1, 0, 1, 0, 1, 0, 1, 0, 1,
  0, 1, 0, -1, 0, -1, 0]