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

时间:2015-01-02 18:21:39

标签: python list

我有一个清单

[-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

5 个答案:

答案 0 :(得分:5)

我会使用简单的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]

如果您要处理很长的列表,第二个是非常有效的,记忆明智。

答案 1 :(得分:1)

怎么样:

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]等。

答案 2 :(得分:1)

这里的方法与其他答案有点不同。首先做一个发电机:

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))

OR:

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

我觉得这样做对于你正在做的事情更加明确,以及更灵活和可重复使用以及以后的内存友好性。另外,你可以使用发电机,这总是很好。

答案 3 :(得分:1)

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

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]

答案 4 :(得分: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]