HeadFirstPython-初识python

HeadFirstPython-初识python

下面我们来看一下实例:
在书中,作者给我们展示了一个电影清单。在这里我们要学习列表的基本操作方法。

cast = ["Cless","plain","Jones","Idle"]

针对这个列表的实例,我们能做哪些操作?

打印出这个实例:

In [28]: print(cast)
['Cless', 'plain', 'Jones', 'Idle']

向这个实例添加一个新的数据项

In [29]: cast.append("iamappend")

In [30]: print(cast)
['Cless', 'plain', 'Jones', 'Idle', 'iamappend']

从这个实例中弹出最后一个数据项
In [31]: cast.pop()
Out[31]: 'iamappend'

In [32]: print(cast)
['Cless', 'plain', 'Jones', 'Idle']

从这个实例中移除指定的数据项。比如我要移除plain
In [33]: cast.remove("plain")

In [34]: print(cast)
['Cless', 'Jones', 'Idle']

现在数据项比以前少了,我再插入到指定的位置上。
In [35]: cast.insert(1,"plain")

In [36]: cast
Out[36]: ['Cless', 'plain', 'Jones', 'Idle']

如何合并列表?
In [37]: newa = ["Gmail","baidu","sina"]

In [38]: print(newa)
['Gmail', 'baidu', 'sina']

In [39]: cast.extend(newa)

In [40]: cast
Out[40]: ['Cless', 'plain', 'Jones', 'Idle', 'Gmail', 'baidu', 'sina']

以上只是简单的描述了一个如何对列表做一个操作。

下一节: 向列表增加更多的数据。
在书13页中,第一题:
原题:
movies = ["The Holy Grail","The Life of Brain","The Meaning of Life"]
将其变成:
movies = ["The Holy Grail",1975,"The Life of Brain",1979,"The Meaning of Life",1983]

操作方法1.直接在进行人工插入
In [42]: movies = ["The Holy Grail","The Life of Brain","The Meaning of Life"]

In [43]: movies.insert(1,1975)

In [44]: movies.insert(3,1979)

In [45]: movies.insert(5,1983)

这里可以直接使用 movies.append(1983) 因为这是最后一个了

In [46]: print(movies)
['The Holy Grail', 1975, 'The Life of Brain', 1979, 'The Meaning of Life', 1983]

操作方法2.就是直接新建列表
In [47]: movies = ['The Holy Grail', 1975, 'The Life of Brain', 1979, 'The Meaning of Life', 1983]

In [48]: print(movies)
['The Holy Grail', 1975, 'The Life of Brain', 1979, 'The Meaning of Life', 1983]

下一节 处理列表数据

简单的迭代
fav_movies = ["The Holy Grail","The Life of Brian"]

In [54]: for each_fclick in fav_movies:
....: print(each_fclick)
....:
The Holy Grail
The Life of Brian

基本的迭代都是由for 或者while进行操作。
两者的区别:
while必须要使用状态信息,需要使用计数标识。否则有可能死循环下去。下面例子中 count就是作为计数标识符存在
In [57]: while count < len(movies):
....: print(movies[count])
....: count=count+1
....:
The Holy Grail
1975
The Life of Brain
1979
The Meaning of Life
1983

使用for作迭代时,python解释器将你考虑状态信息。

下一节,在列表中存储列表

很长的一个列表了
In [62]: movies = ["The Holy Grail",1975,"Terry Jone & Terry Gillam",91,
["Graham chapman",["Michael Palin","Jone Cleese","Terry Gillam","Eric Idle","Terry Jone"]]]

In [63]: print(movies)
['The Holy Grail', 1975, 'Terry Jone & Terry Gillam', 91, ['Graham chapman', ['Michael Palin', 'Jone Cleese', 'Terry Gillam', 'Eric Idle', 'Terry Jone']]]

这么多层的列表肯定不是人工写的,使用Python如何来实现这么多层的列表呢
In [74]: a = ["aaa","ccc"]

In [75]: b = ["aaa111","ccc111"]

In [76]: a.append(b) #如果是用a.extend的话,就是把两个列表进行合并了

In [77]: a
Out[77]: ['aaa', 'ccc', ['aaa111', 'ccc111']]

多列表嵌套的迭代问题
In [65]: for each_item in movies:
....: print(each_item)
....:
The Holy Grail
1975
Terry Jone & Terry Gillam
91
['Graham chapman', ['Michael Palin', 'Jone Cleese', 'Terry Gillam', 'Eric Idle', 'Terry Jone']]

使用简单的for循环无法做打打出第一个数据项

做一个迭代并且加上元素的类型判断
In [66]: for each_item in movies:
....: if isinstance(each_item,list):
....: for each1_item in each_item:
....: if isinstance(each1_item,list):
....: for each2_item in each1_item:
....: print(each2_item)
....: else:
....: print(each1_item)
....: else:
....: print(each_item)
....:
The Holy Grail
1975
Terry Jone & Terry Gillam
91
Graham chapman
Michael Palin
Jone Cleese
Terry Gillam
Eric Idle
Terry Jone

上面的一个例子中,代码有得用的存在,随着列表的嵌套越来越多层的时候,这个循环是有问题。
下面使用一个函数进行简化操作:

In [69]: def print_lol(the_list):
....: for each_item in the_list:
....: if isinstance(each_item,list):
....: print_lol(each_item) #重点在这一行上
....: else:
....: print(each_item)
....:

In [73]: print_lol(movies)
The Holy Grail
1975
Terry Jone & Terry Gillam
91
Graham chapman
Michael Palin
Jone Cleese
Terry Gillam
Eric Idle
Terry Jone

这里有一段按照书上指导写的函数

def print_lol(the_list,indent=False,level=0):
"""
模块参数说明:
indent是一个用于控制是否缩进,默认值为False,启用值为Ture.
level是一个用于控制缩进的级别,默认为0
"""
for each_item in the_list:
if isinstance(each_item,list):
print_lol(each_item,indent,level+1)
else:
if indent:
"这条语句表示一旦indent为Ture的时候,表示缩进已经打开"
#for tab_stop in range(level):
#print " ",
print " " *level , #这种方式也是可以的,可以连这个循环都不用做
"在python 2.x里这使用这种方式。在python 3.x里使用其他方式"
print(each_item)

原文地址:https://www.cnblogs.com/start0cheng/p/3558516.html