Python 3.x 在Python中重命名列表索引-寻找代码解释

Python 3.x 在Python中重命名列表索引-寻找代码解释,python-3.x,list,range,indices,Python 3.x,List,Range,Indices,我正在学习Python,这是我第一次真正体验编程。我已经学习了一系列的课程 我所上的课程与嵌套循环有关。然而,在一个练习中,它们通过本质上重命名列表项的索引来提供问题的解决方案。请记住,这不是正在使用的词典。虽然这些课程进行得很顺利,但这个问题的答案却让我困惑不解,因为无法解释到底发生了什么。此外,在课程系列的其他地方或其他地方,我似乎找不到对这种技术的引用 下面是练习要求我做的。 1“编写一个程序,使用嵌套for循环填充表示日历的三维列表:顶层列表应包含每个月的子列表,每个月应包含四周。每周应

我正在学习Python,这是我第一次真正体验编程。我已经学习了一系列的课程

我所上的课程与嵌套循环有关。然而,在一个练习中,它们通过本质上重命名列表项的索引来提供问题的解决方案。请记住,这不是正在使用的词典。虽然这些课程进行得很顺利,但这个问题的答案却让我困惑不解,因为无法解释到底发生了什么。此外,在课程系列的其他地方或其他地方,我似乎找不到对这种技术的引用

下面是练习要求我做的。 1“编写一个程序,使用嵌套for循环填充表示日历的三维列表:顶层列表应包含每个月的子列表,每个月应包含四周。每周应为空列表。 2修改您的代码,以便更容易通过可读的月份名称访问日历中的月份,并通过从1开始编号的名称访问每周。将事件(以字符串描述的形式)添加到7月的第二周

第一部分没有问题。考虑到参数,第二部分有点挑战性,但给出的答案不是我所期望的

我已经看过关于使用字典实现这种命名索引目标的堆栈溢出的解释:

然而,这里提供了解决方案:

(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)
有人能解释一下这到底是怎么回事吗?我觉得奇怪的是,月份和周的名称不必是字符串,而只是变量名。我认为每个变量名都被分配给了定义的特定范围内的每个项目。但是,我很惊讶变量名可以用作列表索引。一旦这样做,我就无法引用r再也不能用数值表示索引了。例如,我不能使用:

calendar[1][1].append("This is the first week of January.")
我对此更加困惑,因为当我在最后一行之后编写一个简单循环时:

for i in range(12):
    print(i)
我像往常一样打印出数字0到11,但不是这些变量名


到底发生了什么,这是如何工作的?

声明了一系列变量,如下所示:

(第1周、第2周、第3周、第4周)=范围(4)

是一种将多个值存储到多个变量的方法。与此相同:

(WEEK_1, WEEK_2, WEEK_3, WEEK_4) = (0,1,2,3)
或者这个:

WEEK_1 = 0
WEEK_2 = 1
WEEK_3 = 2
WEEK_4 = 3
范围(4)返回从0到3的整数列表

range(4) == (0,1,2,3)
在python中,可以将变量列表作为左操作数写入,并通过在右操作数上写入数据列表来为其赋值。在这种情况下,左侧列表的第一个变量将在右侧存储第一条数据的值,左侧的第二个变量将存储第二条数据的值右边的ta等等

在你的练习中,月和周只作为整数存储在内存中。 这些整数都存储在变量中,这些变量的名称代表每个值所描述的内容


与您所说的相反,
日历[1][1]。附加(“1月的第一周”)
确实有效。从技术上讲,1月的第一周在
日历[0][0]中
因为列表的索引从0开始。这是因为正如我们前面所述,
周1、周2等是存储整数的变量名。因此,月份也会发生同样的事情。当你说
日历[七月][周2]
这与说日历[7][1]
完全一样,只是现在你已经将这些数字存储到了更可读的变量中,这样代码就更能代表它的功能,更容易阅读。

声明了如下变量列表:

(第1周、第2周、第3周、第4周)=范围(4)

是一种将多个值存储到多个变量的方法。与此相同:

(WEEK_1, WEEK_2, WEEK_3, WEEK_4) = (0,1,2,3)
或者这个:

WEEK_1 = 0
WEEK_2 = 1
WEEK_3 = 2
WEEK_4 = 3
范围(4)返回从0到3的整数列表

range(4) == (0,1,2,3)
在python中,可以将变量列表作为左操作数写入,并通过在右操作数上写入数据列表来为其赋值。在这种情况下,左侧列表的第一个变量将在右侧存储第一条数据的值,左侧的第二个变量将存储第二条数据的值右边的ta等等

在你的练习中,月和周只作为整数存储在内存中。 这些整数都存储在变量中,这些变量的名称代表每个值所描述的内容


与您所说的相反,
日历[1][1]。附加(“1月的第一周”)
确实有效。从技术上讲,1月的第一周在
日历[0][0]中
因为列表的索引从0开始。这是因为正如我们前面所述,
周1、周2等是存储整数的变量名。因此,月份也会发生同样的事情。当你说
日历[七月][周2]
这与说
日历[7][1]完全一样
,只是现在您已经将这些数字存储到更可读的变量中,这样代码就更能代表它的功能,更易于阅读。

好的,我现在更明白了。我的困惑是,我似乎在分配名为变量的索引。我现在明白了,我只是给这些数字起了个名字,而没有t索引。索引总是整数

我现在看到了这一点,因为我可以使用以下任何一项引用上述代码1月份的第二周:

calendar[0][1].append("Week 2 of January")
calendar[JANUARY][WEEK_2].append("Week 2 of January")
calendar[JANUARY][FEBRUARY].append("Week 2 of January")
calendar[WEEK_1][WEEK_2].append("Week 2 of January")

所有这些都指向索引[1]和[0]。我并没有神奇地影响范围(12)我刚才调用的函数。

好吧,我现在更明白了。我的困惑是,我似乎在分配名为变量的索引。我现在明白了,我只是给数字命名,而不是给索引命名