在每个列表元素后插入一个零
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.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]
第二个非常有效,内存明智,如果你正在处理一个很长的列表。
怎么样:
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)]
这是灵活的;你也可以用它来吐出 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
我觉得这样做可以更明确地说明您在做什么,并且更灵活,以后可重用,并且非常便于记忆。另外,您还可以使用发电机,这总是很麻烦。
你可以用列表理解来做到这一点:
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]
我有一个列表
[-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.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]
第二个非常有效,内存明智,如果你正在处理一个很长的列表。
怎么样:
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)]
这是灵活的;你也可以用它来吐出 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
我觉得这样做可以更明确地说明您在做什么,并且更灵活,以后可重用,并且非常便于记忆。另外,您还可以使用发电机,这总是很麻烦。
你可以用列表理解来做到这一点:
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]