我有一个名为x的列表,我想用之前的值填充零数据,这意味着:
x = [x[t]=x[t-1] if x[t] == 0.0 for t in range(1,len(x)-2)]
但它显示:SyntaxError:语法无效
我想知道我的代码出了什么问题?非常感谢。
答案 0 :(得分:2)
这是你的作业x[t] = x[t-1]
。相反,只需使用for
循环:
for t in range(1, len(x)-1):
if x[t] == 0:
x[t] = x[t-1]
尽管使用enumerate
执行此操作可能会被认为更加Pythonic:
for idx, val in enumerate(x):
if idx==0: continue # skip the first element
if val == 0:
x[idx] = x[idx-1]
# DEMO
In [1]: x = [1,0,3,0,4,0,5,0]
In [2]: for idx,val in enumerate(x):
...: if idx==0: continue
...: if val == 0:
...: x[idx] = x[idx-1]
...:
In [3]: x
Out[3]: [1, 1, 3, 3, 4, 4, 5, 5]
您也可以通过实现成对迭代器
来使用list compfrom itertools import tee
def pairwise(iterable):
a,b = tee(iterable)
next(b) # advance one iterator
return zip(a,b)
x = [x[0]] + [val if val else lastval for lastval,val in pairwise(x)]
我们需要专门添加第一个元素,因为成对迭代器会跳过它。或者,我们可以不同地定义pairwise
,例如
def pairwise(iterable):
iterable = itertools.chain([None], iterable)
a,b = itertools.tee(iterable)
next(b)
return zip(a,b)
x = [val if val else lastval for lastval,val in pairwise(x)]
# ta-da!
答案 1 :(得分:1)
这是列表理解,可以满足您的需求:
x = [xi if xi or i==0 else x[i-1]
for i, xi in enumerate(x)]