1.列表数据类型
“列表”是一个值,它包含多个值构成的序列。
术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那
些值。列表值看起来像这样:['cat', 'bat', 'rat', 'elephant']。就像字符串值用引号来标记字符串的起止一样,列表用左方括
号开始,右方括号结束,即[ ]。列表中的值也称为“表项”。表项用逗号分隔。
2.切片
spam = ['cat', 'bat', 'rat', 'elephant']
spam[1:4]:是一个列表的切片。
在一个切片中,第一个整数是切片开始出的下标。第二个整数是切片结束处的下标。
切片向上增长,直到第二个下标的值,但不包括它。切片求值为一个新的列表值。
>>>spam[0:4]
['cat', 'bat', 'rat', 'elephant']
>>>spam[1:3]
[ 'bat', 'rat']
>>>spam[0:1]
['cat']
>>>spam[0:-1]
['cat', 'bat', 'rat']
作为快捷方式,可以省略切片中冒号两边的一个下标或两个下标。省略第一个下标
相当于使用0,或列表的开始。省略第二个下标相当于使用列表的长度,以为这切片直到列表的末尾。
>>>spam[:2]
['cat', 'bat']
>>>spam[1:]
['bat', 'rat', 'elephant']
>>>spam[:]
['cat', 'bat', 'rat', 'elephant']
3.用len()可以取得列表的长度
len()函数将返回传递给它的列表值得个数,就像它能计算字符串中字符的个数一样(len('abc') 返回 3)
>>>len(spam)
4
4.用下标改变列表中的值
>>>spam[1] = 'aaa'
>>>spam
['cat', 'aaa', 'rat', 'elephant']
>>>spam[2] = spam[1]
>>>spam
['cat', 'aaa', 'aaa', 'elephant']
>>>spam[-1] = 12345
>>>spam
['cat', 'aaa', 'rat',12345]
5.列表连接和列表复制
+ 操作符可以连接两个列表,得到一个新列表,就像它将两个字符串合并成一个新的字符串。
* 操作符可以用于一个列表和一个整数,实现列表的复制。
>>>[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']
6.用del语句从列表中删除值
del 语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移动一个下标。
>>>spam = ['cat', 'bat', 'rat', 'elephant']
>>>del spam[2]
>>>spam
['cat', 'bat', 'elephant']
7.列表用于循环
>>>for i in [0, 1, 2, 3]:
print(i)
0
1
2
3
在每次迭代中,让变量一次设置为列表中的值。
一个常见的Python技巧,是在for循环中使用range(len(someList)), 迭代列表的每一个下标。例如:
>>>supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
>>>for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is ' + supplies[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
8.in 和 not in 操作符
利用in 和 not in 操作符可以确定一个值是否在列表中。像其他操作符一样, in 和 not in 用在表达式中,连接两个值:
一个是要在列表中查找的值, 一个是待查找的列表。返回值为布尔型。
>>>spam = ['hello', 'hi', 'howdy', 'heyes']
>>>'cat' in spam
False
>>>'howdy' not in spam
Flase
9.多重赋值技巧
在一行代码中,可以用列表为多个变量赋值。例如:
>>>cat = ['fat', 'black', 'loud']
>>>size, color, disposition = cat
>>> size
'fat'
>>> color
'black'
>>> disposition
'loud'
变量的数目和列表的长度必须严格相等,否则Python将给出ValueError:
>>>cat = ['fat', 'black', 'loud']
>>>size, color, disposition, name = cat
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
size, color, disposition, name = cat
ValueError: not enough values to unpack (expected 4, got 3)
10.列表中的增强赋值操作(+=、*=)
+=操作符也可以完成字符和列表的连接,*=操作符可以完成字符串和列表的复制
>>>spam = 'Hello'
>>>spam += 'World'
>>>spam
'HelloWorld'
>>>bacon = ['Zophie']
>>>bacon *= 3
>>>bacon
['Zophie', 'Zophie', 'Zophie']
11.方法
1.用index()方法在列表中查找值
在index()方法中传入一个值,如果该值在列表中,就返回它的下标。如果不在,Python就报ValueError.
>>>spam = ['hello', 'hi', 'howdy', 'heyas']
>>>spam.index('hi')
1
如果列表中存在重复的值,就返回它第一次出现的下标。
>>>spam = ['hello', 'hi', 'howdy', 'hello']
>>>spam.index('hello')
0
2.用append()和insert()方法在列表中添加值
>>>spam = ['cat', 'dog', 'bat']
>>>spam.append('moose')
>>>spam
['cat', 'dog', 'bat', 'moose']
append()方法是将参数添加到列表的末尾。
inset()方法可以在列表任意下标处插入一个值。inset()方法的第一个参数是新值的下标,第二个参数是要插入的新值。
>>> spam = ['cat', 'dog', 'bat']
>>> spam.insert(1, 'chicken')
>>> spam
['cat', 'chicken', 'dog', 'bat']
3.用remove()方法从列表中删除值
给remove()方法传入一个值, 它将从被调用的列表中删除。
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('bat')
>>> spam
['cat', 'rat', 'elephant']
如果试图删除列表中不存在的值, 将导致ValueError错误
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('chicken')
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
spam.remove('chicken')
ValueError: list.remove(x): x not in list
如果该值在列表中出现了多次, 只有第一次出现的值会被删除。
>>> spam = ['cat', 'bat', 'rat', 'cat', 'bat', 'rat']
>>> spam.remove('cat')
>>> spam
['bat', 'rat', 'cat', 'bat', 'rat']
**注**:如果知道想要删除的值在列表中的下标,用del语句删除,例如: del spam[2]
如果知道想要从列表中删除的值,用remove()方法。例如:spam.remove('cat')
4.用sort()方法将列表中的值排序
数值的列表或者字符串的列表, 能用sort方法排序。
>>> spam = [2, 5, 3.14, 1, 7]
>>> spam.sort()
>>> spam
[1, 2, 3.14, 5, 7]
>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']
也可以指定reverse关键字为True, 让sort()按逆序排列。
>>> spam.sort(reverse = True)
>>> spam
['elephants', 'dogs', 'cats', 'badgers', 'ants']
不能对既有数字又有字符串的列表进行排序,因为Python不知道如何比较它们,报TypeError
>>> spam = [1,3,2,4,'alice','bob']
>>> spam.sort()
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
spam.sort()
TypeError: '<' not supported between instances of 'str' and 'int'
sort()方法对字符串排序时, 使用"ASCII字符顺序", 而不是实际的字典顺序。这意味着大写字母排在小写字母之前。因此排序时,
小写字母a在大写字母Z之后。
>>> 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']
这将导致sort()方法将列表中所有的表项当成小写,但实际上并不会改变它们在列表中的位置。