计算机科学及编程导论(麻省理工)

计算机科学及编程导论(麻省理工)

5 (18人评价)
  • 课时:(24)

  • 学员:(655)

  • 浏览:(25710)

  • 加入课程

数组以及可变性,字典,伪码,对于代码运行效率的简介的笔记

相关课时: 笔记详情:

Lecture 7: Lists and mutability, dictionaries, pseudocode, introduction to efficiency.

 

本课介绍的内容比较多,比较杂,但都是非常基础细小的知识点。本课介绍了列表的另外一个基本操作:赋值。另外,本课也简要介绍了字典,伪代码以及效率。

 

列表的赋值操作可以改变列表内元素所关联的值。通过List[0] = Value这样的形式进行赋值。其中[0]是列表中第一个元素,这个在前面的课程中已经提到过了。

但是在使用列表赋值的语句时需要注意一点:是否存在其他变量也对应了此列表,那么改变此列表中的元素,会导致所有对应这个列表的变量进行改变。

举个简单的例子,我有如下程序段(1):

L1 = [1, 2, 3]

L2 = L1

L1[0] = 4

print L1

>>> [4, 2, 3]

print L2

>>> [4, 2, 3]

这就正如我上面所提到的,由于L1和L2都对应[1, 2, 3]这个列表,改变这个列表的第一项,会导致L1和L2都改变。

但是,再看这个程序段(2):

L1 = [1, 2, 3]

L1 = L2

L1 = [4, 2, 3]

print L1

>>> [4, 2, 3]

print L2

>>> [1, 2, 3]

我们就发现程序段(1)和程序段(2)的差别在于(1)改变了L1和L2,而(2)仅仅改变了L1。这是由于(1)改变了所对应列表本身,而(2)则是改变了L1和列表的对应关系,使L1重新对应了一个新的列表[4, 2, 3],同时,L2保留了原有的对应关系,即L1对应的仍然是[1, 2, 3]

因此,在写程序的时候特别要注意这种细微的地方,一不小心就会出现错误。

 

字典(Dictionaries)可以当做是列表的高级形态,不过它的括号是大括号,而不是方括号。它有以下三个最显著的特点:

  • 没有一定的排列次序
  • 没有一定的元素号码
  • 每一个元素都是<key, value>这样的形式

(注意:由于没有一定的元素号码,我们就需要在key里设定这个元素的号码,因此就有了<key, value>这样特殊的形式)

<key, value>这样的形式可以这样理解,比如我们有一个单词"abcdefg",它的解释是这样的"a boy can do everything for girls" (^~^) 那么我们把它写成这样的形式:

dict = { "abcdefg" : "a boy can do everything for girls" }

当我需要用到这个解释的时候,我就只需要使用那个单词就好了。我可以这样做:

print dict["abcdefg"]

>>> "a boy can do everything for girls"

这样就变得非常简便了。当然我们也可以把这个解释存到列表里面去,但是它所对应的元素号码就仅仅是自然数了,达不到解释说明的效果。所以把它输到字典里面,简单明了,通俗易懂,调用起来也非常方便。

相信在后面的课程中,会遇到更多的使用字典的例子,在这里就不累述了。

 

下面讲的是伪代码(Pseudocode),这是一个非常实用和有效的方法。它便于我们整理思路,在写复杂程序的时候,它就是我们的“操作指南”。

【注意】 对于初学者而言,在写任何较为复杂的程序之前,一定要先写好伪代码,明确自己到底要做什么。虽然看上去会花一些时间,但是在写程序的时候就会速度非常快,因为已经明确了每一步要做什么。相信尝试伪代码之后,初学者会有更深刻的体会。

 

最后,本课简单介绍了效率,以及效率的重要性。这里涉及了一些计算机的历史和内部结构。本人认为,本课所讲的效率和算法远不如《算法导论》(第二版)来的深刻,但是简单易懂,适合初学者学习。如果想进一步更全面的了解效率和算法,可以参考《算法导论》的书,也可以学习MIT另外一个课程“算法导论”。相信各位会对那个长发飘飘的号称MIT最年轻教授印象很深刻的。

 

总结:本课内容比较杂,但都很简单,略过即可。

0 0

你感兴趣的课程

理论基础 数学之美
2万+浏览/ 704学员/ 4.4评分
免费
2万+浏览/ 931学员/ 4.7评分
¥9.90
2万+浏览/ 824学员/ 4.8评分
免费