《Python编程快速上手——让繁琐的工作自动化》读书笔记 第四章 列表
接下来我们来学习 python 中的列表(有点像 Java 中的数组,但并不是数组)
“列表”是一个值,它包括多个字构成的序列,术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那些值。列表看起来像这样:['cat', 'bat', 'rat', 'elephant']。就像字符串值用引号来标记字符串起止一样,列表用左方括号(代表)开始,右方括号(代表)结束。列表中的值称为“表项”,用逗号隔开。
一、列表定义及使用
>>> spam = ['cat','bat','rat','ele'] >>> spam[2] 'rat' >>> '888' + spam[2] '888rat' >>> spam[0:2] ['cat', 'bat'] >>> spam[0:-1] ['cat', 'bat', 'rat'] >>> spam[:] ['cat', 'bat', 'rat', 'ele'] >>> for i in range(len(spam)): print('Index ' + str(i) + ' in spam is ' + spam[i]) Index 0 in spam is cat Index 1 in spam is bat Index 2 in spam is rat Index 3 in spam is ele
- del ampm[index] 删除一个元素 index 是列表的一个下标
- spam.remove('bat') 删除指定元素
- spam.index('rat') 返回别表的下标,如果 列表中存在两个相同的值,则返回第一次出现的下标
- spam.append('令狐冲') 在列表末尾添加元素;
- spam.insert(2,'田伯光') 在列表指定位置添加元素;
- spam.sort() 对列表进行排序
列表一些方法的使用:
>>> spam ['cat', 'bat', 'rat', 'ele'] >>> spam.append('令狐冲') >>> spam ['cat', 'bat', 'rat', 'ele', '令狐冲'] >>> spam.insert(2,'田伯光') >>> spam ['cat', 'bat', '田伯光', 'rat', 'ele', '令狐冲'] >>> spam ['cat', 'bat', '田伯光', 'rat', 'ele', '令狐冲'] >>> spam.remove('bat') >>> spam ['cat', '田伯光', 'rat', 'ele', '令狐冲'] >>> spam ['cat', '田伯光', 'rat', 'ele', '令狐冲'] >>> spam.sort() >>> spam ['cat', 'ele', 'rat', '令狐冲', '田伯光']
使用列表做一个小 case
wxNames = [] while True: print('Enter then name of xiake '+ str(len(wxNames) + 1) + ' ( or enter nothing to stop.)') name = input() if name =='': break wxNames = wxNames + [name] print('The xiake names are ') for name in wxNames: print(' ' + name)
import random messages = ['It\'s certain', 'It\'s definitely so', 'Yes hazy try again', 'Ask again later', 'Connentrate and ask again', 'My reply is no', 'Outllok not so goog', 'Very doubtful'] print(messages[random.randint(0,len(messages)-1)])
二、增强的赋值操作
增强的赋值语句 | 等价的赋值语句 |
spam+=1 | spam=spam+1 |
spam-=1 | spam=spam-1 |
spam*=1 | spam=spam*1 |
spam/=1 | spam=spam/1 |
spam%=1 | spam=spam%1 |
三、类似列表的类型:字符串和元组
列表并不是唯一表示序列值的数据类型。比如,字符串与列表实际上很相似。也可以用于列表类似的方法操作字符串:
name='Zophie' print(name[0]) print(name[-2]) print(name[0:4]) print('Zo' in name) for i in name: print(' * * * '+i+' * * * ')
输出:
Z
i
Zoph
True
* * * Z * * *
* * * o * * *
* * * p * * *
* * * h * * *
* * * i * * *
* * * e * * *
元组除了一下两个方面,与列表几乎完全一样;
1、组输入用的是圆括号,而非方括号
eggs=('Hello',42,0.5) print (eggs[0]) print (eggs[1:3]) print (len(eggs))
2、元组与字符串一样,与列表不同的是,他们都是不可变的,不能改变他们的值;
eggs=('Hello',42,0.5) eggs[1]=99
这样会报错
Traceback (most recent call last):
File "/usercode/file.py", line 2, in <module>
eggs[1]=99
TypeError: 'tuple' object does not support item assignment
注意:可以使用用list()和tuple()函数来转换类型
>>>tuple(['cat', 'dog', 5]) ('cat', 'dog', 5) >>>list(('cat', 'dog', 5)) ['cat', 'dog', 5] >>>list('hello') ['h', 'e', 'l', 'l', 'o']
四、引用
可以理解为起一个别名。
一旦更改任何一个的内容,列表与列表的引用都会改变。
就像无论别人是直接叫我们的外号还是直接叫我们的名字我们都知道是是在叫我们
然后列表的引用直接是:列表的引用的名字=列表的名字,这样就可以了
spam=['A','B','C','D'] cheese=spam cheese[1]=42 print(spam) print(cheese) #输出 ['A', 42, 'C', 'D'] ['A', 42, 'C', 'D']
五、copy模块的copy()和deepcopy()函数
import copy spam=['A','B','C','D'] cheese=copy.copy(spam) cheese[1]=42 print(spam) print(cheese)
['A', 'B', 'C', 'D']
['A', 42, 'C', 'D']
说明:copy()函数,相当于建立了一个新的链表,能独立于第一个链表修改,如果要复制的链表中包含了链表,那么使用deepcopy()函数可以用来同时复制内部的链表。