在列表中创建列表

时间:2015-02-16 22:26:59

标签: list python-2.7 tuples

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

例如,1月将是:

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

第一个条目是月份名称,第二个条目是日期。

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

1 个答案:

答案 0 :(得分:0)

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

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

有更有效的方法可以做到这一点,但这很简单,希望你能理解。