【发布时间】:2017-11-30 15:05:22
【问题描述】:
我正在学习 Python,这是我第一次真正的编程体验。我一直在学习here的一系列课程。
我正在学习的课程是关于嵌套循环。然而,在一个练习中,他们通过实质上重命名列表项的索引来提供问题的解决方案。请记住,这不是正在使用的字典。虽然这些课程进展顺利,但这个问题的答案让我感到困惑,因为没有解释发生了什么。此外,我似乎在课程系列的其他任何地方或其他地方都找不到对这种技术的参考。
这是练习要求我做的事情。 1“编写一个程序,它使用嵌套的for循环来填充一个表示日历的三维列表:顶级列表应该包含每个月的子列表,每个月应该包含四个星期。每个星期应该是一个空列表。 2 修改您的代码,以便更容易地通过人类可读的月份名称访问日历中的月份,以及每周通过从 1 开始编号的名称。将事件(以字符串描述的形式)添加到七月的第二周。
第一部分没问题。考虑到参数,第二部分有点挑战性,但给出的答案不是我所期望的。
我已经看到了关于使用字典来完成这种命名索引目标的堆栈溢出的解释: Python: can I have a list with named indices?
但是,这里提供了解决方案:
(JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER) = range(12)
(WEEK_1, WEEK_2, WEEK_3, WEEK_4) = range(4)
calendar = []
for m in range(12):
month = []
for w in range(4):
month.append([])
calendar.append(month)
calendar[JULY][WEEK_2].append("Go on holiday!")
print(calendar)
有人可以解释一下这是如何工作的吗?我觉得奇怪的是月份和星期的名称不必是字符串,而只是变量名称。我认为每个变量名都被分配给定义的特定范围内的每个项目。但是,我很惊讶变量名可以用作列表索引。完成此操作后,我将无法再通过数值引用索引。例如,我不能使用:
calendar[1][1].append("This is the first week of January.")
我对此感到更加困惑,因为当我在最后一行之后编写一个简单的循环时:
for i in range(12):
print(i)
我像往常一样打印出数字 0 到 11,但不是这些变量名。
究竟发生了什么,它是如何工作的?
【问题讨论】:
标签: python-3.x list range indices