父与子的编程--列表
本节总结:
1创建列表
2列表索引、索引(切片或分片简写)、修改元素
3增加元素三种方法(append()、extend()、insert())
4删除元素三种方法(remove()、del、pop())
5搜索列表(in、查找索引 index())
6循环处理
7列表排序(正序、倒叙2种方法、创建副本排序2种方法(分切、sorted()))
列表:[]
一、创建列表:
空列表:newList = []
二、向列表增加元素:newList.append('abc')
记住,向列表增加元素之前,必须先创建列表
列表可以包含Python 能存储的任何类型的数据,这包括数字、字符串、对象,甚至可以包含其他列表。并不要求列表中的元素是同种类型或同一种东西。这说明,一个列表中可以同时包含不同类型,例如数字和字符串,可能像这样:
my_list = [5, 10, 23.76, 'Hello', myTeacher, 7, another_list]
三、从列表获取元素--索引
1.列表中的第一项就是my_list[0]

索引从0 而不是1
2.列表“分片”
my[1:3]取出来2个元素

分片第一个索引开始
与for 循环中的range() 类似,分片获取元素时,会从第一个索引开始,不过在达到第二个索引之前停止。正是因为这个原因,前面的例子中我们只取回3 项,而不是4 项。要记住这一点,一种方法就是牢记取回的项数总是两个索引数之差(4– 1 = 3,所以取回3 项)。
列表分片,还有一个重要的问题需要记住:对列表分片时取回的是另一个(通常更小的)列表。这个更小的列表称为原列表的一个分片(slice)。原来的列表并没有改变。这个分片是原列表的部分副本(copy)。
分片简写:
- 如果你想要的分片包括列表的开始部分,简写方式是使用冒号,后面是想要的元素个数,
例如: >>> print letters[:2]
['a', 'b']
- 要得到列表末尾也可以用类似的记法。
>>> print letters[2:]
['c', 'd', 'e']
- 如果没有放入任何数,而只有冒号,就可以得到整个列表:
>>> print letters[:]
['a', 'b', 'c', 'd', 'e']
修改元素
可以使用索引来修改某个列表元素:
>>> print letters
['a', 'b', 'c', 'd', 'e']
>>> letters[2] = 'z'
>>> print letters
['a', 'b', 'z', 'd', 'e']
但是不能使用索引向列表增加新的元素。目前,这个列表中有5 项,索引分别是从0 到4。
向列表增加元素的其他方法:共有3 种方法:append()、extend() 和insert()。
append() 向列表末尾增加一个元素。
extend() 向列表末尾增加多个元素。
insert() 在列表中的某个位置增加一个元素,不一定非得在列表末尾。你可以告诉它要在哪里增加元素。
>>> letters.append('n')
>>> print letters
['a', 'b', 'c', 'd', 'e', 'n']
>>> letters.extend(['p', 'q', 'r'])
>>> print letters
['a', 'b', 'c', 'd', 'e', 'n', 'g', 'p', 'q', 'r']
>>> letters.insert(2, 'z')
>>> print letters
['a', 'b', 'z', 'c', 'd', 'e', 'n', 'g', 'p', 'q', 'r']
如果想插入多个元素呢?


为什么是倒叙插入的呢???
append() 和extend() 的区别:
>>> letters = ['a','b','c','d','e']
>>> letters.extend(['f', 'g', 'h'])
>>> print letters
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> letters.append(['f', 'g', 'h'])
>>> print letters
['a', 'b', 'c', 'd', 'e', ['f', 'g', 'h']]
怎么回事?嗯,我们前面说过,append() 会向列表增加一个元素。它怎么会增加3 个元素呢?其实它并没有增加3 个元素,这里确实只增加了一个元素,只不过这刚好是一个包含3 项的列表。正是这个原因,所以在这个列表中多了一对中括号。要记住,列表可以包含任何东西,也包括其他列表。这个例子就属于这种情况。
从列表删除元素:有3 种方法:remove()、del 和pop()
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> letters.remove('c')
>>> print letters
['a', 'b', 'd', 'e']
你不需要知道这个元素在列表中的具体位置,只需要知道它确实在列表中(可以是任何位置)。如果你想删除的东西根本不在列表中,就会得到错误消息:

del 允许利用索引从列表中删除元素,如下所示:
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> del letters[3]
>>> print letters
['a', 'b', 'c', 'e']
我们删除了第4 个元素(索引3),也就是字母d。

用pop() 删除元素
pop() 从列表中取出最后一个元素交给你。这说明,你可以为它指派一个名字,
比如:
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> lastLetter = letters.pop()
>>> print letters
['a', 'b', 'c', 'd']
>>> print lastLetter
e

使用pop() 时还可以提供一个索引,如:
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> second = letters.pop(1)
>>> print second
b
>>> print letters
['a', 'c', 'd', 'e']
括号里没有提供参数时,pop() 会返回最后一个元素,并把它从列表中删除。如果在括号里放入一个数,pop(n) 会给出这个索引位置上的元素,而且会把它从列表中删除。

搜索列表
in 关键字
>>> 'a' in letters
True
>>> 's' in letters
False

查找索引
为了找出一个元素位于列表中的什么位置,可以使用index() 方法,如下:
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> print letters.index('d')
3

循环处理列表
不过循环完全可以迭代处理任何列表,而不一定非得是数字列表。假设要显示
出我们的字母列表,一行显示一个元素,可以这样做:
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> for letter in letters:
print letter
a
b
c
d
e

列表排序
要对列表排序,可以使用sort() 方法。
>>> letters = ['d', 'a', 'e', 'c', 'b']
>>> print letters
['d', 'a', 'e', 'c', 'b']
>>> letters.sort()
>>> print letters
['a', 'b', 'c', 'd', 'e']
sort() 会自动按字母顺序对字符串从小到大排序,如果是数字,就会按数字顺序从小到大排序。
sort() 会在原地修改列表。这说明它会改变你提供的原始列表,而不是创建一个新的有序列表

备注:字母和数字混合的元组组成的列表无法排序
按逆序排序
让一个列表按逆序排序有两种方法。一种方法是先按正常方式对列表排序,然
后对这个有序列表完成逆置(reverse),如下:
>>> letters = ['d', 'a', 'e', 'c', 'b']
>>> letters.sort()
>>> print letters
['a', 'b', 'c', 'd', 'e']
>>> letters.reverse()
>>> print letters
['e', 'd', 'c', 'b', 'a']

另一种方法是向sort() 增加了一个参数,直接让它按降序排序(从大到小):
>>> letters = ['d', 'a', 'e', 'c', 'b']
>>> letters.sort (reverse = True)
>>> print letters
['e', 'd', 'c', 'b', 'a']
所有排序和逆置都会对原来的列表做出修改。

如果希望保留原来的顺序,而对列表的副本进行排序,可以使用分片记法建立副本,也就是与原列表相等的另一个列表(有关的内容已经在这一章前面讨论过):
>>> letters.reverse()
>>> print letters
['e', 'd', 'c', 'b', 'a']
>>> original_list = ['Tom', 'James', 'Sarah', 'Fred']
>>> new_list = original_list[:]
>>> new_list.sort()
>>> print original_list
['Tom', 'James', 'Sarah', 'Fred']
>>> print new_list
['Fred', 'James', 'Sarah', 'Tom']


另一种排序方法—sorted():可以得到一个列表的有序副本而不会影响原列表的顺序
>>> original = [5, 2, 3, 1, 4]
>>> newer = sorted(original)
>>> print original
[5, 2, 3, 1, 4]
>>> print newer
[1, 2, 3, 4, 5]

sorted() 函数提供了原列表的一个有序副本。

浙公网安备 33010602011771号