1. 列表数据类型
“列表”是一个值,格式形如:['cat', 'bat', 'rat', 'elephant'](左方号开始,又方号结束;列表中的值也成为“表项”,“表项”用逗号分隔)
1) 用下标取得列表中的单个值
列表中的元素可以用下标获取。对于下标,有如下规则:
a) 下标从0开始。
b) 如果使用的下标超出了列表中元素的个数,将会报IndexError错误。
c) 下标必须是整数,不能是浮点数,否则报TypeError错误。
示例:
spam = [['cat', 'bat'], [10, 20, 30, 40,50]]
>>> spam = [['cat', 'bat'], [10,20, 30, 40, 50]]
>>> spam[0]
['cat', 'bat']
>>> spam[0][1]
'bat'
>>> spam[1][4]
50
2) 负数下标
负整数也可以作为下标,-1表示列表中最后一个元素,-2表示列表中倒数第二个元素,以此类推。
示例:
spam = [['cat', 'bat'], [10, 20, 30, 40,50]]
>>> spam = [['cat', 'bat'], [10,20, 30, 40, 50]]
>>> spam[-1][-1]
50
3) 利用切片取得子列表
使用下标可以取得列表的一个元素,而使用切片则可以取得列表的多个元素。列表的格式形如:spam[ a: b],a表示开始标,b表示结束标,但是不包括b。
示例:
>>> spam = ['cat', 'bat', 'rat','elephant']
注:
a) 第一个下标如果省略,默认从0开始;第二个下标如果省略,默认使用列表的长度。
>>> spam[:2]
['cat', 'bat']
>>> spam[1:]
['bat', 'rat', 'elephant']
>>> spam[:]
['cat', 'bat', 'rat', 'elephant']
b) 如果开始标和结束表都不在范围则返回空列表[]。
>>> spam = ['cat', 'bat','rat', 'elephant']
>>> spam[9:16]
[]
c) 如果切片倒着取,结果是空列表[]。如:
>>> spam = ['cat', 'bat', 'rat','elephant']
>>> spam[3:1]
[]
4) 用 len()取得列表的长度
len()函数能统计列表元素的个数。示例:
>>> spam = ['cat', 'dog', 'moose']
>>> len(spam)
3
5) 用下标改变列表中的值
示例:
>>> spam = ['cat','bat','rat','elephant']
>>> spam[2] = "mouse"
>>> spam
['cat', 'bat', 'mouse','elephant']
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']
7) 用 del 语句从列表中删除值(索引)
del语句用于删除指定下标的值,被删除值后面的值都将向前移动一个下标。示例:
>>> spam = ['cat','bat','rat','elephant']
>>> del spam[0]
>>> spam
['bat', 'rat', 'elephant']
2. 使用列表
1) 列表用于循环
示例:
>>> spam =['cat','mat','rat','elephant']
>>> 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 mat
Index 2 in spam is rat
Index 3 in spam is elephant
2) in 和not in 操作符
可以使用in和not in 判断一个值是否在某个列表中,结果返回一个布尔值。示例:
>>> spam =['cat','mat','rat','elephant']
>>> 'cat' in spam
True
>>> 'cat' not in spam
False
3) 多重赋值技巧
用列表一次性为多个变量复制。示例:
>>> cat = ['fat','black','loud']
>>> size, color, disposition = cat
>>> size
'fat'
3. 增强的赋值操作
+=操作符也可以完成字符串和列表的连接,*=操作符可以完成字符串和列表的复制。
4. 方法
方法和函数是一回事。只是它是调用在一个值上。
1) 用 index()方法在列表中查找值
给列表index()方法传入一个值,如果值在列表中存在,则返回对应的下标,如果不存在,则返回ValueError。示例:
2) (列表特有)用 append()和 insert()方法在列表中添加值
append()方法,将参数添加到列表的末尾。示例:
>>> spam =['cat','mat','rat','elephant']
>>>spam.append("chicken")
>>> spam
['cat', 'mat', 'rat', 'elephant','chicken']
insert()方法,可以将参数添加到列表的指定位置,原位置的值将会向后移动。示例:
>>> spam = ['cat', 'dog', 'bat']
>>> spam.insert(1, 'chicken')
>>> spam
['cat', 'chicken', 'dog', 'bat']
a) append()和insert()方法是列表方法,只能在列表上调用。
b) 如果insert()方法插入的索引超过了列表的长度,那么会直接追加在最后面或者最前面。
示例:
>>> spam =['cat','mat','rat','elephant']
>>>spam.insert(9,"goose")
>>> spam
['cat', 'mat', 'rat', 'elephant','goose']
>>> len(spam)
5
3) 用 remove()方法从列表中删除值(值)
给remove()方法传一个值,这个值将会从列表中删除。示例:
>>> spam =['cat','mat','rat','elephant']
>>> spam.remove("cat")
>>> spam
['mat', 'rat', 'elephant']
1) 如果值不存在,那么将导致ValueError。
2) 如果该值在列表中出现多次,那么只有第一次出现的会被删除。
4) 用 sort()方法将列表中的值排序
a) sort()方法只能对纯数值的列表或者纯字符串列表排序,排序的结果为正序。
b) 也可以指定reverse关键字的值为True,让sort()方法按逆序排序。
c) sort()方法对字符串排序时,使用“ASCII 字符顺序”,而不是实际的字典顺序。如果要按字典顺序排序,需要将关键字参数key设置为str.lower
5. 类似列表的类型:字符串和元组
1) 可变和不可变数据类型
列表是“可变的”数据类型,它的值可以添加、删除或改变。但是,字符串是“不可变的”,它不能被更改。尝试对字符串中的一个字符重新赋值,将导致 TypeError 错误。如果需要修改,可以使用切片实现。
2) 元组数据类型
组与列表的主要区别还在于,元组像字符串一样,是不可变的。如果元组只有一个值,需要在这个值的后面加上一个逗号表面这是元组。示例:
>>> type(('hello',))
<class 'tuple'>
>>> type(('hello'))
<class 'str'>
3) 用 list()和 tuple()函数来转换类型
使用list()和tuple()函数可以将值转换为列表和元组。示例:
>>>list(("cat","mat","rat","elephant"))
['cat', 'mat', 'rat', 'elephant']
>>> tuple(['cat', 'mat', 'rat','elephant'])
('cat', 'mat', 'rat', 'elephant')
6. 引用
变量包含对列表值的引用,而不是列表值本身。但对于字符串和整数值,变量就包含了字符串或整数值。在变量必须保存可变数据类型的值时,例如列表或字典,Python 就使用引用。对于不可变的数据类型的值,例如字符串、整型或元组,Python变量就保存值本身。示例:
>>> 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]
1) 传递引用
当函数被调用时,参数的值被复制给变量。对于列表(以及字典),这意味着变量得到的是引用的拷贝。
2) copy 模块的 copy()和 deepcopy()函数
在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表或字典,你可能不希望这些变动影响原来的列表或字典。要做到这一点,Python 提供了名为 copy 的模块,其中包含 copy()和 deepcopy()函数。第一个函数copy.copy(),可以用来复制列表或字典这样的可变值,而不只是复制引用。如果要复制的列表中包含了列表,那就使用 copy.deepcopy()函数来代替