Python初入门(一)(Head First Python 第一章 初识Python)

来源:互联网 发布:mac重装没有磁盘 编辑:程序博客网 时间:2024/06/05 11:05

Python中的列表(类似于数组),但能做的事情更多,格式如下
movies=[“The Holy Grail”,”The Life of Brain”,”The Meaning of Life”]

这里可以发现不需要声明类型,因为Python是弱类型语言,其变量标识符没有类型。很多其他编程语言坚持要求代码中的每一个标识符都必须声明有类型信息,但对Python并不适用:标识符只是名字,可以指示某个类型的数据对象。可以把Python的列表想成是一个高层集合。对于列表来说,数据项的类型并不重要。

列表就像是数组

在Python中创建一个列表时,解析器会在内存中创建一个类似数组的数据结构存储数据,数据项自下而上堆放(形成一个堆栈),类似于其他编程语言中的数组技术,堆栈中的第一个槽编号为0,第二个槽编号为1,以此类推,与其他编程语言一样。
这里写图片描述

像数组一样,可以使用标准的中括号偏移量记法来访问一个列表槽中的数据项:
print(movies[1])

创建了列表之后,可以使用列表方法在末尾增加一个数据项(使用append()方法),或者从列表末尾删除数据(使用pop()方法),还可以在列表末尾增加一个数据项集合
在末尾增加一个数据项
movies.append(“Gilliam”)
从列表末尾删除数据
movies.pop()
在列表末尾增加一个数据项集合
movies.extend(“Gilliam”,”Chapman”)

还可以在列表中找到并删除一个特定的数据项(使用remove()方法),然后在某个特定的位置前面增加一个数据项(使用insert()方法)
在列表中找到并删除一个特定的数据项
movies.remove(“”The Meaning of Life”“)
在某个特定的位置前面增加一个数据项
movies.insert(0,1975)


列表允许混合类型

Python的列表(list)与java中的list类似,但是Python中的list更为强大,它允许混合类型。

你可以发现movies.insert(0,1975)在列表中混合了不同的类型。Python列表可以包含混合类型的数据,在同一个Python列表中,混合存放字符串和数字是允许的,更可以存储任意类型的数据。
Python列表是一个高层集合,原本设计为要存储一个”相关事物”的集合。列表并不关系这些事物的类型是什么,因为列表的存在只是为了提供一种机制,从而可以采用列表形式存储数据。


处理列表数据

处理每一个列表项是一个常见的需求,Python通过内置的for循环可以非常方便地做到这一点。使用for循环是可伸缩的,使用与任意大小的列表。

movies=["The Holy Grail","The Life of Brain","The Meaning of Life"]for movie in movies:     print(movie)

Python的for循环就是为了处理列表和Python中的其他迭代结构。列表是Python中最常用的迭代数据结构,需要迭代处理一个列表时,最好使用for循环。
这里写图片描述
列表处理代码称为”组(suite)”。组(suite),python代码块,会通过缩进来指示分组。

除了使用for,还可以使用while循环编写迭代代码。这里写图片描述

除非有非常充分的理由使用while循环(或者需要while循环提供的额外控制),都应该优先选择for。for循环会负责从列表起始位置开始一直到列表末尾,如果使用for循环,几乎不可能出现”大小差1”错误,而while则不一定。

在Python中,单引号和双引号都可以用来创建字符串。对此只有一个规则,就是如果字符串前面使用了某个引号,那么后面也要用同样的,必须成对出现,不能混用。

如果需要在一个字符串中嵌入一个双引号可以对用转义符号”\”对双引号转义或者用单引号引起这个字符串。


在列表中存储列表

可以看出在下面这个列表中,列表中存储着另一个列表

movies=["The Hloy Grail",1975,"Terry Jones & Terry Gilliam",91,["Graham Chapman",["Michael Palin","John Cleese","Terry Gilliam","Eric Idle","Terry Jones"]]]

访问其中的某个数据项
print(movies[4][1][3]) 输出是 Eric Idle


在列表中查找列表

如果你希望访问列表中的每一个数据项,包含内列表中的数据项时,需要先做一个判断,判断该数据项是否列表,用if…else…模式即可。而检查当前处理的列表项是不是一个列表时,可以使用Python内置的一个BIF(内置函数,built-in functions),isinstance()来判断。它允许检查某个特定标识符是否包含某个特定类型的数据:
这里写图片描述
其中,len()BIF会提供某个数据对象的长度或者统计一个集合中的项数。

回到我们的目标,要访问包含内列表中的列表项,代码如下:

for movie in movies:    if isinstance(movie,list):        for nested_movie in movie:            print(nested_movie)    else:        print(movie)

结果如下:
The Hloy Grail
1975
Terry Jones & Terry Gilliam
91
Graham Chapman
[‘Michael Palin’, ‘John Cleese’, ‘Terry Gilliam’, ‘Eric Idle’, ‘Terry Jones’]

发现代码解决不了多层嵌套,再改动下代码:

 for movie in movies:    if isinstance(movie,list):        for nested_movie in movie:            if isinstance(nested_movie,list):                for deeper_item in nested_movie:                    print(deeper_item)    else:        print(movie)

结果如下:
The Hloy Grail
1975
Terry Jones & Terry Gilliam
91
Michael Palin
John Cleese
Terry Gilliam
Eric Idle
Terry Jones

问题是解决了,但是会发现,如果嵌套的列表多了,又需要改代码,在这里为了不重复代码,应当创建一个函数。


创建函数

Python中的函数是一个命名的代码组,如果需要还可以有一个参数表(可选)。要用def语句定义Python函数,为函数提供一个函数名,并在括号里指定一个参数表(可以为空)。标准形式如下:
这里写图片描述
代码改为如下,其中使用了递归

def print_lol(the_list):    for each_item in the_list:        if isinstance(each_item,list):            print_lol(each_item)        else:            print(each_item)

结果如下,很好地达成了我们的要求:
这里写图片描述