关于《python编程快速上手-让繁琐工作自动化》的学习笔记
1.列表数据类型
“列表”是一个值,它包含多个字构成的序列。“列表值”指的是列表本身,而不是指列表之内的那些值。列表从左方括号开始,右方括号结束,即[]。列表中的值也称为“表项”,用逗号分隔。
- 用下标取得列表中的单个值
列表后面方括号内的整数被称为“下标”。列表中的第一个值下标为0,第二个值下标为1,第三个值下标为2,以此类推
>>>spam=['cat','bat','rat','elephant']
>>>spam[0]
'cat'
>>>spam[1]
'bat'
>>>spam[2]
'rat'
>>>spam[3]
'elephant'
>>>['cat','bat','rat','elephant'][3]
'elephant'
>>>hello+spam[0]
'hello cat'
列表也可以包含其他列表值,这些列表的列表中的值,可以通过多重下标来访问
>>>spam=[['cat','bat'],[1,2,,3,4,5]]
>>>spam[0]
['cat','bat']
>>>spam[0][1]
'bat'
>>>spam[1][4]
5
- 负数下标
虽然下标从0开始向上增长,但也可以用负整数作为下标。整数-1指的是列表中的最后一个下标,-2指的是列表中倒数第二个下标,以此类推
>>>spam=['cat','bat','rat']
>>>spam[-1]
'rat'
>>>spam[-2]
'bat'
- 利用切片取得子列表
切片输入在一对方括号中,像下标一样,但它有两个冒号分隔的整数。在一个切片中,第一个整数是切片开始处的下标,第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。切片求值为一个新的列表值
>>>spam=['cat','bat','rat','elephant']
>>>spam[1:3]
['bat','rat']
>>>spam[0:-1]
['cat','bat','rat']
- 使用len()取得列表的长度
>>>spam=['cat','bat','rat','elephant']
>>>len(spam)
4
- 用下标改变列表中的值
>>>spam=['cat','bat','rat','elephant']
>>>spam[1]='hello'
>>>spam
['cat','hello','rat','elephant']
- 列表的连接和复制
+操作符可以连接两个列表,得到一个新列表
*操作符可以用于一个列表和一个整数,实现列表的复制
>>>[1,2,3]+['a','b','c']
[1,2,3,'a','b','c']
>>>['a','b','c']*3
['a','b','c','a','b','c','a','b','c']
>>>spam=[1,2,3]
>>>spam=spam+['a','b','c']
>>>spam
[1,2,3,'a','b','c']
- 用del语句从列表中删除值
del语句将删除列表中下标处的值,表中被删除值后面的所有值都将向前移动一个下标
spam=['a','b','c']
>>>del spam[1]
>>>spam
['a','c']
2.使用列表
- 列表用于循环
>>>supplies=['pens','staplers','flame-throwers','binders']
>>>for i in range(len(supplies)):
print('Index'+str(i)+' in supplies is: '+ssupplies[i]
Index 0 in supplies is: pens
Index 1 in supplies is: staplers
Index 2 in supplies is: flame-throwers
Index 3 in supplies is: binders
- in 和not in操作符
利用in和not in操作符可以确定一个值是否在列表中。像其他操作符一样,in和not in用在表达式中,连接两个值:一个要在列表中查找的值以及待查找的列表,这些表达式将求值为布尔值
>>>spam=['hello','hi','howdy','heyas']
>>>'cat' in spam
Flase
>>>'hello' in spam
True
>>>'cat' not in spam
True
>>>'hello' not in spam
Flase
- 多重赋值技巧
多重赋值技巧是一种快捷方式,用列表中的值为多个变量赋值(变量的数目和列表的长度必须严格相等)
>>>cat=['fat','black','loud']
>>>size,color,disposition=cat
3.增强的赋值操作
增强的赋值操作符
增强的赋值语句 | 等价的赋值语句 |
---|---|
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 |
+=操作符也可以实现字符串的连接,*=操作符也可以实现字符串和列表的复制
4.列表方法
方法和函数是一回事,只是方法是调用在一个值上
- 用index()方法在列表中查找值
列表值有一个index()方法,可以传入一个值,如果该值存在于列表中,就返回它的下标;否则python就报ValueError(如果列表中存在重复的值,就返回它第一次出现的下标)
>>>spam=['hello','hi','howdy','heyas']
>>>spam.index('hello')
0
>>>abc=['hello','cat','hello']
>>>abc.index('hello')
0
- 用append()和insert()方法在列表中添加值
- append()方法
将参数添加到列表末尾
>>>spam=['cat','dog','bat'] >>>spam.append('moose') >>>spam ['cat','dog'.'bat','moose']
- insert()方法
在列表任意下标处插入一个值,第一个参数是新值的下标,第二个参数是要插入的新值>>>spam=['cat','dog','bat'] >>>spam.insert(1,'chicken') >>>spam ['cat','chicken','dog','bat']
- append()方法
- 使用remove()方法从列表中删除值
给remove()方法传入一个值,它将从被调用的列表中删除(试图删除列表中不存在的值将会导致ValueError错误,如果该值在列表中出现多次,只有第一次出现的值会被删除)
>>>spam=['cat','bat','rat']
>>>spam.remove('bat')
>>>spam
['cat','rat']
- 使用sort()方法将列表中的值排序
数值的列表或字符串的列表,能用sort()方法排序(也可以指定reverse关键词参数为True,让sort()按逆序排序,sort()方法对字符串排序时使用"ASCII字符顺序",而不是实际的字典顺序,如果需要按照普通的字典顺序来排序,需将关键词参数key设置为str.lower)
>>>spam=[2,5,3.14,1,-7]
>>>spam.sort()
>>>spam
[-7,1,2,3.14,5]
>>>spam=['ants','cats','badgers','dogs','elephants']
>>>spam.sort()
>>>spam
['ants','badgers','cats','dogs','elephants']
>>>spam.sort(reverse=True)
>>>spam
['elephants','dogs','cats','badgers','ants']
5.类似列表的类型:字符串和元组
对列表的许多操作也可以作用于字符串:按下标取值、切片、用于for循环、用于len()以及用于in和not in操作符
- 可变和不可变类型
列表是“可变的”数据类型,其值可以添加、删除和改变;而字符串是“不可变的”,尝试对一个字符串中的一个字符进行重新赋值将会导致TypeError错误。“改变”一个字符串的正确方式是使用切片和连接,构造一个“新的”字符串
>>>name='Zophie a cat'
>>>newname=name[0:7]+'the'+name[8:12]
>>>name
'Zophie a cat'
>>>newname
'Zophie the cat'
- 元组数据类型
“元组”数据类型几乎与列表数据类型一样,除一下两个方面:
1.元组输入时用圆括号(),而不是用方括号
2.元组像字符串一样是不可变的,其值不能被修改、添加和删除
如果元组中只有一个值,可以在括号内该值的后面跟上一个逗号,表明这是一个元组
>>>type(('hello',))
<class 'tuple'>
>>>type(('hello'))
<class 'str'>
- 使用list()和tuple()函数来转换类型
函数list()和tuple()将返回传递给它们的值的列表和元组版本
>>>tuple(['cat','dog',5])
('cat','dog',5)
>>>list(('cat','dog',5))
['cat','dog',5]
>>>list('hello')
['h','e','l','l','o']
6.引用
将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。引用是一个值,指向某些数据,列表引用是指向一个列表的值(变量必须保存可变数据类型的值时,例如列表或字典,python就是用引用;对于不可变数据类型的值时,例如字符串、整型或元组,python就保存值本身)
>>>spam=[1,2,3,4,5,6]
>>>cheese=spam
>>>chieese[1]='hello'
>>>spam
[1,'hello',3,4,5,6]
>>>cheese
[1,'hello',3,4,5,6]
- 传递引用
当函数被调用时,参数的值被复制给变元。对于列表以及字典,意味着变元得到的是引用的拷贝 - copy模块的copy()和deepcopy()函数
- copy()函数
用来复制列表或字典这样的可变值,而不只是复制引用(不会影响原来的列表或字典)
- copy()函数
>>>import copy
>>>spam=[1,2,3,4]
>>>cheese=copy.copy(spam)
>>>cheese[42]
>>>spam
[1,2,3,4]
>>>cheese
[1,42,3,4]
- 如果复制的列表包含了列表,就是用deepcopy()函数同时复制其内部的列表