在列表中创建列表

Create a list in a list

正在尝试创建一个名为 monthDetails 的列表,其中包含 13 个项目。第一项是年份,例如2015,其余12项是包含月份的元组,如下所示:

例如,一月为:

('JANUARY', [' ', ' ', ' ', ' ', '1', ' 2', ' 3', ' 4',
              ...   ' 30', ' 31', ' ', ' ', ' ', ' ', ' ', ' ', ' '])

第一项是月份名称,第二项是日期。

如何创建主列表,然后将所需数据添加到主列表中的其他 12 个元组?

访问列表中元组中的列表:

year = [
  ('JANUARY', [' ', '1', ... ' 30', ' 31', ' ']),
  ('MAY', [' ', '1', ... ' 30', ' 31', ' '])
]

print year  ## the whole thing
print year[0]  ## ('January', [' ', '1', ... '31', ' '])
print year[0][0]  ## 'January'
print year[0][1]  ## [' ', ' ', ... ' 31', ' ', ...]

此方法的众多问题之一是您无法在元组创建后对其进行赋值。所以你不能“创建主列表,然后将所需数据添加到主列表中的其他 12 个元组”。您必须在创建元组之前创建内部列表。一旦你有了元组,你就可以将它添加到外部列表中。

最大的问题当然是对这种数据进行硬编码。您可以(并且应该)使用日期库,例如 python 的日期时间。 您可以在需要有关特定日期的信息时创建日期对象:

import datetime
d = datetime.date(2015, 1, 1)
print d.strftime("%A"), d.year, d.month, d.day

d = datetime.date(2015, 1, 31)
print d.strftime("%A %x")

您可以前进一个月(例如打印日历):

m = 1
d = 1
date = datetime.date(2015, m, d)
while date.month == m:
    wd = date.isoweekday()  ## Mon = 1, ... Sun = 7

    ## do whatever you need
    print date.strftime("%A %x")

    d += 1
    date = date.replace(day=d)  ## new date with the next day

我鼓励你通读 https://docs.python.org/2/library/datetime.html#date-objects

还有更有效的方法来做到这一点,但这很简单,希望您能理解。