Python:从旧列表按两部分组成的新顺序中创建新列表

时间:2019-03-05 16:07:33

标签: python

我有一个很长的由日期系统组织的数据列表,我想重新组织并创建一个新列表-这样数据就更直观了。下面的更多内容:

数据的组织方式如下:

A1, B1, C1 ... L1, A2, B2, ...

从本质上讲,每个字母代表一个特定的月份(例如10月),并代表相应的日期。有十二个月,因此这种模式会在第12次输入后重复出现。

此外,以这种方式设置的数据集已经连续20年了。因此,来自:

A1(1970) to A1(1971)

每第992个条目重复一次。每个月有31天,对应于无效日期的无效值以“ ---”表示。我可以稍后删除它们。

我的目标是使用正确的年份来组织数据日历样式(10月1日,2月... 31日,11月1日等)。

到目前为止,我可以检索按月而不是按年组织的值列表。因此,我将获得所有年份的十月份的所有值,然后是所有年份的十一月的所有值,等等。

import itertools
discharge = list(itertools.chain.from_iterable([dischargeraw[::12] ... 
dischargeraw[11::12]))

我的问题是我需要捕获第一个月(通过每12日附加一个值),直到附加第31个值为止。然后,我需要它跳过992个值,做同样的事情,每12个值捕获31次,然后跳过992。此外,整个过程将不得不重复十二次以捕获一年中的每个月,然后再次启动在第一个周期结束时-就是索引[31]。

实际上,它可能不得不跳过962(992-31),但是我可以修改这些内容。

对不起,我是编码新手,这是一个复杂的问题。

1 个答案:

答案 0 :(得分:0)

每年需要372(31 * 12)个连续条目来表示。在一年之内,每天都是索引(天* 12)+月,例如3月4日为2 * 12 + 4 = 28。

这意味着要获取给定日期的条目,您可以执行以下操作:

def get_entry(entries, year, month, day):
  return entries[year * 372 + day * 12 + month]

其中月和日为零索引,而年是数据集中第一年的偏移量。

要对整个数据集进行排序,可以执行以下操作:

def get_sorted_entries(entries, num_years):
  sorted_entries = []
  for year in range(num_years):
    for month in range(12):
      for day in range(31):
        sorted_entries.append(get_entry(entries, year, month, day))
  return sorted_entries