列表是由一系列按顺序排列的元素组成,列表的元素可以是字母、数字或任何东西,它们之间没有关系,用方括号([ ])表示列表。
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1. 索引从0开始
与大多数编程语言一样,列表的索引从0开始,而且还提供从右往左数。
>>> numbers[0]
1
>>> numbers[9]
10
>>> numbers[-1]
10
>>> numbers[-2]
9
2. 用切片访问多个元素
可以指定两个索引为切片的边界,访问列表中的一段,需要注意的是第二个索引指定的元素不含在切片内。
>>> numbers[0:5]
[1, 2, 3, 4, 5]
>>> numbers[-3:-1] # 不包含最后的元素
[8, 9]
>>> numbers[-3:] # 这样可以包含最后一个元素
[8, 9, 10]
>>> numbers[:5] # 从头开始可以省略第一个索引
[1, 2, 3, 4, 5]
>>> numbers[:] # 两个索引都省略就是访问所有元素
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[2:1] # 如果第二个索引比第一个小,返回空
[]
加上步长,就可以跳着访问元素了,默认步长是1。
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
>>> numbers[0:10:3]
[1, 4, 7, 10]
>>> numbers[10:0:-2] # 步长为负数时,可以倒着访问
[10, 8, 6, 4, 2]
3. 使用加法和乘法
加法运算可用来拼接序列;乘法运算可用来创建一个重复n次的新列表。
>>> numbers + [11,12,13]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> newNumbers = numbers * 2
>>> newNumbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4. in、len、min、max、sum
检查一个值是否包含在列表中可以用运算符in;
内置函数len、min、max、sum用于返回列表的长度、最小值、最大值和总和;
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 2 in numbers
True
>>> 'aa' in numbers
False
>>> len(numbers)
10
>>> min(numbers)
1
>>> max(numbers)
10
>>> max(['a','b'])
'b'
>>> sum(numbers)
55
5. 利用索引和切片操作列表
利用索引可以直接修改或删除列表的元素。
>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0] = -1
>>> numbers
[-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> del numbers[0]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
也可以利用切片修改多个元素,甚至可以巧妙的插入或删除元素。
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[:3] = [0,0,0] # 把前3个元素改成0
>>> numbers
[0, 0, 0, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[:3] = [] # 把前3个元素删掉
>>> numbers
[4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:0] = [1,2,3] # 在索引0出再插入1,2,3
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> del numbers[:3] # 也可以用del删除元素
>>> numbers
[4, 5, 6, 7, 8, 9, 10]
6. 列表常用方法
- append、extend、insert
append方法用于将一个对象追加到列表末尾;
extend方法可以将多个值追加到末尾;
insert方法可以在指定位置插入元素。
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> a.extend([5, 6, 7])
>>> a
[1, 2, 3, 4, 5, 6, 7]
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> a.insert(3, 3.5)
>>> a
[1, 2, 3, 3.5, 4, 5, 6, 7]
- pop、remove、clear
pop方法从列表中删除一个元素(默认为最后一个元素),并返回被删除的元素;
remove方法的参数是一个指定值,用于删除列表中第一个该指定值的元素;
clear方法清空列表。
>>> a = [1, 2, 3]
>>> a.pop()
3
>>> a
[1, 2]
>>> a.pop(0)
1
>>> a
[2]
>>> b = [1, 2, 3, 3, 2, 1]
>>> b.remove(2)
>>> b
[1, 3, 3, 2, 1]
>>> b.clear()
>>> b
[]
- count、index
count方法用于计算指定元素在列表中出现的次数;
index方法用于查找指定值第一次出现的位置,找不到的话就会报错。
>>> a = [1, 2, 3] * 2
>>> a
[1, 2, 3, 1, 2, 3]
>>> a.count(1)
2
>>> a.index(3)
2
- copy
copy方法可以复制列表,也可以说是创建一个副本,也可以用a[:]或list(a)的方式来复制a,但b=a却不能复制a,而是将另一个名称关联到li列表。
>>> a = [1, 2, 3]
>>> b = a # a和b指向同一个列表
>>> b[0] = -1
>>> a
[-1, 2, 3]
>>>
>>> a = [1, 2, 3]
>>> # 使用copy方法创建一个副本
>>> b = a.copy()
>>> b[0] = -1
>>> b
[-1, 2, 3]
>>> a
[1, 2, 3]
>>> # 使用a[:]创建一个副本
>>> c = a[:]
>>> c[0] = -1
>>> c
[-1, 2, 3]
>>> a
[1, 2, 3]
>>> # 使用list(a)创建一个副本
>>> d = list(a)
>>> d[0] = -1
>>> d
[-1, 2, 3]
>>> a
[1, 2, 3]
- reverse、sort、sorted
reverse方法将列表逆序排列,直接修改原列表,但不返回值;
sort方法对列表中的元素按顺序排序,同样是xiug修改原列表,不返回值;
sorted方法对列表排序并返回一个排序后的副本,不修改原列表。
>>> a = [1 ,5, 2, 9, 8, 10]
>>> a.reverse()
>>> a
[10, 8, 9, 2, 5, 1]
>>> a = [1 ,5, 2, 9, 8, 10]
>>> a.sort()
>>> a
[1, 2, 5, 8, 9, 10]
>>> a = [1 ,5, 2, 9, 8, 10]
>>> b = sorted(a)
>>> b
[1, 2, 5, 8, 9, 10]
>>> a
[1, 5, 2, 9, 8, 10]
sort方法有两个可选参数:key和reverse。参数key的值可以是一个用于排序的函数(可以是自定义函数),该函数为每个元素创建一个键,在根据这些键值来排序。reverse默认值为False,设为True时则逆序排列。
>>> a = ['hello', 'python', 'a', 'no']
>>> a.sort(key=len)
>>> a
['a', 'no', 'hello', 'python']
>>> a.sort(key=len, reverse=True)
>>> a
['python', 'hello', 'no', 'a']
7. 元组
如果想创建一系列不可修改的元素,可以使用元组。定义一个元组的方式是用逗号分隔元素,也可以用圆括号括起来。使用tuple方法可将列表转换为元组。
>>> a = 1,2,3
>>> a
(1, 2, 3)
>>> b = (1,2,3)
>>> b
(1, 2, 3)
>>> c = 1, # 创建只含一个元素的元组,必须有逗号
>>> c
(1,)
>>> d = tuple([3,2,1])
>>> d
(3, 2, 1)