如何解决Python中的错误``列表分配索引超出范围''

时间:2020-10-29 03:10:51

标签: python list

我尝试从名为date_range的数据列表中存储一年的星期数,该数据存储了诸如

date_range[1] = DatetimeIndex(['2020-03-02', '2020-03-03', '2020-03-04', '2020-03-05',
               '2020-03-06', '2020-03-07', '2020-03-08', '2020-03-09',
               '2020-03-10', '2020-03-11', '2020-03-12', '2020-03-13',
               '2020-03-14', '2020-03-15', '2020-03-16', '2020-03-17',
               '2020-03-18', '2020-03-19', '2020-03-20', '2020-03-21',
               '2020-03-22', '2020-03-23', '2020-03-24', '2020-03-25',
               '2020-03-26', '2020-03-27', '2020-03-28', '2020-03-29',
               '2020-03-30', '2020-03-31', '2020-04-01', '2020-04-02',
               '2020-04-03', '2020-04-04', '2020-04-05'],
              dtype='datetime64[ns]', freq='D')

通过使用以下代码

weeknumber= [] 
for i in range(28): 
    for j in range(35):
        weeknumber[i][j] = pd.Timestamp(date_range[i][j]).weekofyear

但是,IDE显示错误“列表分配索引超出范围”。如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

要设置2d列表,您可以使用以下内容并将cols和row替换为您的值。只需记住行和列会增加1。

weeknumber= [[0]*cols]*rows

答案 1 :(得分:1)

list中的python为空时,您无法将值分配给列表的未分配索引。 所以您在这里有2个选择:

  1. 使用append就像: list.append(value)
  2. 创建一个loop,以便在主要list之前为您的for分配一个值。如下所示:
i = 0 
while ( i < index_you_want):
    list[i] = 0
...
#here your main code

答案 2 :(得分:1)

使用此:

weeknumber = []
for i in range(28):
    weeknumber.append([])
    for j in range(35)):
        weeknumber[i].append(pd.Timestamp(date_range[i][j]).weekofyear)

要了解为什么您会比其他方法得到令人惊讶的结果,请参阅this answer to your other question