Python自学记录4

python编程快速入手——让繁琐工作自动化

第四章学习记录

4.1列表数据类型
4.1.1用下标取得列表中的单个值
假定列表[‘cat’,‘bat’,‘rat’,‘elephant’]保存在名为spam的变量中。
如spam[0]表示列表中的第一个值,以此类推
下标只能是整数,不能是浮点值
列表也可以包含其他列表值
如spam=[[‘cat’,‘bat’],[10,20,30,40,50]]
spam[0][1]第一个下标表示使用哪个列表值,第二个下标表明该列表值中的值
4.1.2负数下标
整数值-1指的是列表中的最后一个下标,-2指的是列表中倒数第二个下标,以此类推
4.1.3利用切片取得子列表
“切片”可以从列表中取得多个值,结果是一个新列表
spam[2]是一个列表和下标(一个整数)
spam[1:4]是一个列表和切片(两个整数)
在一个切片中,第一个整数是切片开始处的下标,第二个整数是切片结束处的下标
切片向上增长,直至第二个下标的值,但不包括它
快捷方法:可省略切片中冒号两边的一个下标或两个下标
省略第一个下标相当于使用0,或列表的开始
省略第二个下标相当于使用列表的长度,意味着切片直至列表的末尾

spam=[‘cat’,‘bat’,‘rat’,‘elephant’]
spam[:2]
[‘cat’,‘bat’]

spam[1:]
[‘bat’,‘rat’,‘elephant’]

spam[:]
[‘cat’,‘bat’,‘rat’,‘elephant’]

4.1.4用len()取得列表的长度
len()函数将返回传递给它的列表中值的个数
4.1.5用下标改变列表中的值
如spam[1]=‘balabala’
意味着‘“将列表spam下标1处的值赋值为‘balabala’”
4.1.6列表连接和列表复制
+操作符可以连接两个列表,得到一个新列表

[1,2,3]+[‘A’,‘B’,‘C’]
[1,2,3,‘A’,‘B’,‘C’]

*操作符可以用于一个列表个一个整数,实现列表的复制

[‘X’,‘Y’,‘Z’]*3
[‘X’,‘Y’,‘Z’,‘X’,‘Y’,‘Z’,‘X’,‘Y’,‘Z’]

spam=[1,2,3]
spam=spam+[‘A’,‘B’,‘C’]
spam
[1,2,3,‘A’,‘B’,‘C’]

4.1.7用del语句从列表中删除值
del语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移动一个下标

spam=[‘cat’,‘bat’,‘rat’,‘elephant’]
del spam[2]
spam
[‘cat’,‘bat’,‘elephant’]

4.2使用列表
4.2.1列表用于循环
循环是针对一个列表或类似列表中的每个值,重复的执行代码块
——————
for i in range(4)
print(i)
——————
程序输出将是:
——————
0
1
2
3
——————
4.2.2 in和not in 操作符
利用in和not in操作符,可以确定一个值是否在列表中,连接两个值:一个要在列表中查找的值,以及待查找的列表
这些表达式将求值为布尔值
4.2.3多重赋值技巧
多重赋值技巧是一种快捷方式,可以在一行代码中,用列表中的值为多个变量赋值
如用

cat=[‘fat’,‘black’,‘loud’]
size,color,disposition=cat

代替

cat=[‘fat’,‘black’,‘loud’]
size=cat[0]
color=cat[1]
disposition=cat[2]

变量的数目和列表的长度必须严格相等
4.3增强的赋值操作
针对+、-、*、/、和%操作符都有增强的赋值操作符

增强的赋值操作符等价的赋值语句
spam+=1spam=spam+1
spam-=1spam=spam-1
spam*=1spam=spam*1
spam/=1spam=spam/1
spam%=1spam=spam%1

4.4方法
4.4.1用inde()方法在列表中查找值
列表值有一个index()方法,可以传入一个值,如果该值存在于列表中,就返回它的下标;如果该值不在列表中,Python就报ValueError

spam=[‘Hello’,‘hi’,‘howdy’,‘heyas’]
spam.index(‘Hello’)
0

spam.index(‘heyas’)
3

spam.index(‘howdy howdy howdy’)
Traceback (most recent call last):
File “<pyshell#4>”, line 1, in
spam.index(‘howdy howdy howdy’)
ValueError: ‘howdy howdy howdy’ is not in list

如果列表中存在重复的值,就返回它第一次出现的下标

spam=[‘Zophie’,‘Pooka’,‘dog’,‘bat’]
spam.index(‘Pooka’)
1

4.4.2用append()和insert()方法在列表中添加值

spam=[‘cat’,‘dog’,‘bat’]
spam.append(‘moose’)
spam
[‘cat’, ‘dog’, ‘bat’, ‘moose’]

此方法将参数添加到列表的末尾
insert()方法可以在列表任意下标处插入一个值
[‘cat’, ‘dog’, ‘bat’, ‘moose’]

spam=[‘cat’,‘dog’,‘bat’]
spam.insert(1,‘chicken’)
spam
[‘cat’, ‘chicken’, ‘dog’, ‘bat’]

4.4.3用remove()方法从列表中删除值
给remove()方法传入一个值,它将从被调用的列表中删除

spam=[‘cat’,‘bat’,‘rat’,‘elephant’]
spam.remove(‘bat’)
spam
[‘cat’, ‘rat’, ‘elephant’]

试图删除列表中不存在的值,将导致ValueError错误
如果该值在列表中出现多次,只有第一次出现的值会被删除
4.4.4用sort()方法将列表的值排序
数值的列表或字符串的列表,能用sort()方法排序

spam=[2,5,3.14,1,-7]
spam.sort()
spam
[-7, 1, 2, 3.14, 5]

也可以将单词按字母表顺序排列
也可以指定reverse关键字参数为True,让sort()按逆序排序

spam.sort(reverse=True)
spam
[5, 3.14, 2, 1, -7]

关于sort()方法需要注意的三件事
1、sort()方法当场对列表排序
2、不能对既有数字又有字符串值得列表排序
3、sort()方法对字符串排序时,使用"ASCII字符顺序",而不是实际的字母顺序
即意味着大写字母排在小写字母之前

spam=[‘Alice’,‘ants’,‘Bob’,‘badgers’,‘Carol’,‘cats’]
spam.sort()
spam
[‘Alice’, ‘Bob’, ‘Carol’, ‘ants’, ‘badgers’, ‘cats’]

如果需要按照普通的字典顺序来排序,就在sort()方法调用时,将关键字参数key设置为str.lower

spam=[‘a’,‘z’,‘A’,‘Z’]
spam.sort(key=str.lower)
spam
[‘a’, ‘A’, ‘z’, ‘Z’]

4.5例子程序:神奇8球和列表
4.5.1类似列表的类型:字符串和元组
列表并不是唯一表示序列值的数据类型
对于列表的许多操作,也可以用于字符串:按下标取值、切片、用于for循环、用于len(),以及用于in 和not in操作符

name=‘Zophie’
name[0]
‘Z’

name[-2]
‘i’

name[0:4]
‘Zoph’

'Zo’in name
True

'z’in name
False

4.6.1可变和不可变数据类型
列表是“可变的”数据类型,它的值可以添加、删除或改变
字符串是“不可变的”,它不能被更改
对字符串中的一个字符重新赋值,将导致TypeError错误

name=‘Zophie a cat’
name[7]=‘the’
Traceback (most recent call last):
File “<pyshell#22>”, line 1, in
name[7]=‘the’
TypeError: ‘str’ object does not support item assignment

“改变”一个字符串的正确方式,是使用切片和连接
构造一个“新的”字符串,从老的字符串那里复制一部分

name=‘Zophie a cat’
newName=name[0:7]+‘the’+name[8:12]
name
‘Zophie a cat’

newName
‘Zophie the cat’

egga=[1,2,3]
eggs=[1,2,3]
eggs=[4,5,6]
eggs
[4, 5, 6]

eggs=[1,2,3]
del eggs[2]
del eggs[1]
del eggs[0]
eggs
[]

eggs.append(4)
eggs
[4]

4.6.2元组数据类型
“元组”数据类型的与列表数据的不同之处
1、元组输入时用圆括号(),而不是用方括号[]

eggs=(‘hello’,42,0.5)
eggs[0]
‘hello’

eggs[1:3]
(42, 0.5)

len(eggs)
3

2、元组与列表的主要区别在于,元组像字符串一样,是不可变的
元组不能让他们的值被修改、添加或删除

eggs=(‘hello’,42,0.5)
eggs[1]=99
Traceback (most recent call last):
File “<pyshell#47>”, line 1, in
eggs[1]=99
TypeError: ‘tuple’ object does not support item assignment

4.6.3用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’]

4.7引用

spam=42
cheese=spam
spam=100
spam
100

cheese
42

列表中

spam=[0,1,2,3,4,5]
cheese=spam
cheese[1]=‘Hello!’
spam
[0, ‘Hello!’, 2, 3, 4, 5]

cheese
[0, ‘Hello!’, 2, 3, 4, 5]

变量包含对列表值的引用,而不是列表值本身
4.7.1传递引用
当函数被调用时,参数的值被复制给变元
对于列表,这意味着变元得到的是引用的拷贝

4.7.2copy模块的copy()和deepcopy()函数

import copy
spam=[‘A’,‘B’,‘C’,‘D’]
cheese=copy.copy(spam)
cheese[1]=42
spam
[‘A’, ‘B’, ‘C’, ‘D’]

cheese
[‘A’, 42, ‘C’, ‘D’]

如果要复制的列表中包含了列表,那就使用copy.deepcopy()函数来代替
deepcopy()函数将同时复制它们内部的列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值