Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:列表索引超出填充数据集的范围错误_Python_List_Time_Append_Indexoutofrangeexception - Fatal编程技术网

Python:列表索引超出填充数据集的范围错误

Python:列表索引超出填充数据集的范围错误,python,list,time,append,indexoutofrangeexception,Python,List,Time,Append,Indexoutofrangeexception,我有一个数据集[101102105106108111],对应的时间[1,2,5,6,8,11]。 当第n次和第n+1次之间的差不是1时,我需要用零填充数据集。到目前为止,我已经尝试了很多,这是一个: for i in xrange(0,10): if time[i+1]-time[i] != 1: d.insert(i,data[i]) else : d.insert(i,0) 因此,总的来说,我想要一个新的时间集,它是[1,2,3,4,5,6,7,

我有一个数据集
[101102105106108111]
,对应的时间
[1,2,5,6,8,11]
。 当第n次和第n+1次之间的差不是1时,我需要用零填充数据集。到目前为止,我已经尝试了很多,这是一个:

for i in xrange(0,10):
    if time[i+1]-time[i] != 1:
       d.insert(i,data[i])
    else :
       d.insert(i,0)

因此,总的来说,我想要一个新的时间集,它是
[1,2,3,4,5,6,7,8,9,10,11]
,一个新的日期集,它是
[101102,0,0105106,0108,0,0111]
从你的问题来看,不清楚零放在哪个箱子里,但这应该能让你知道如何解决这个问题:

>>> data = [101,102,105,106,108,111]
>>> [0 if (d - data[i-1] == 1) else d for i,d in enumerate(data)]
[101, 0, 105, 0, 108, 111]
>>> 

以下方法应该有效:

import itertools

data_set = [101,102,105,106,108,111] 
data_times = [1,2,5,6,8,11]

new_time_set = range(data_times[0], data_times[-1]+1)
new_data_set = []

last_time = data_times[0]

for data, time in itertools.izip(data_set, data_times):
    new_data_set.extend([0] * (time-last_time-1) + [data])
    last_time = time    

print "Data:", new_data_set
print "Times:", new_time_set
这将打印以下输出:

Data: [101, 102, 0, 0, 105, 106, 0, 108, 0, 0, 111]
Times: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
更新-脚本现在使用时间中断,而不是数据来填补空白

如果时间序列使用浮动:

new_time_set = range(int(data_times[0]), int(data_times[-1])+1)

这就是代码缩进的方式吗?那不行。另外,d和数据之间有什么区别?你得到了一个错误,因为你正在从0循环到9,时间列表中只有6个元素,你提供的数据集。事实证明,这不是我需要的。我错误地使用了一个数据是线性的例子。这不是问题,只是用一些更新的数据和你需要的新结果创建一个新问题。添加到目前为止的代码。结果证明这不是我需要的。我错误地使用了一个数据是线性的例子。我的实际数据更像是“[101101102.3101.2119.2103.4]”,它对应于一个时间集“[1,2,5,6,10,13]”。因此,我需要时间从1-13秒运行,并且需要一个数据集,该数据集具有零,而此时没有数据被获取。例如,我希望输出“[101101,0,0102.3101.2,0,0,0119.2,0,0103.4]”,对应于“[1,2,3,4,5,6,7,8,9,10,11,12,13]”。对于这个糟糕的问题,我深表歉意,我对pythonso还不太熟悉:
time=[1,2,5,6,10,13]data=[101101102.3101.2119.2103.4]d=[]#t=range(time[0],time[-1]+1)##对于xrange中的i(time[0],time[-1]+1):diff=time[(i+1)]-time[i]#如果diff==1:d,则打印diff(data[i](数据[i+1])i=i+1如果d[i]==d[i-1]:d.remove(d[i-1])当diff>1:d.append(0)diff=diff-1
Try now时,它现在使用时间间隔来生成缺少的数据。