我有一个清单
[-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
答案 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.chain
,itertools.izip
和itertools.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)]
这很灵活;你也可以用它来吐出dict
或tuple
:
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]