1. 什么是列表 list
列表 list 是 Python 内置的一种数据类型。在[]用逗号分隔开多个任意类型的值,通常用来描述同一种类型的值,放入列表。
list 的特点:
- 有序
- 存多个值
- 可以按索引村取值
- 可以随时添加和删除其中的元素
- 可变类型(可变:值可变,id不变)
- 不可hash
2. 如何使用列表 list
获取列表 list中元素的个数
1
2
3
4
5'David','Nick','Rachel','Rose'] name = [
# len() 是 Python 的内置函数之一,主要功能是返回对象的长度或者项目个数
# 对象可以是(字符串、列表、元祖、集合、字典)
len(name)
4取列表中重复的元素
1
2
3'David','Nick','Rachel','Rose','Nick'] name = [
'Nick') name.count(
2按索引取值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16'David','Nick','Rachel','Rose'] name = [
name
['David', 'Nick', 'Rachel', 'Rose']
0] # 按索引来访问list中每一个位置的元素,位置从0开始计算 name[
'David'
1] name[
'Nick'
-1] # 索引 -1 代表直接取到列表的最后一个值 也就是倒数第一个值 name[
'Rose'
-2] # 依次类推 可以取倒数第二个值 name[
'Rachel'
4] # 当索引取4时,列表索引超过了范围,就会提示你列表索引超过了范围 name[
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
# 最后一个元素的索引可以 可以用 元素个数减1 也可以表示为 len(name)-1按值找索引
1
2
3
4
5
6
7'David','Nick','Rachel','Rose'] name = [
'Rachel') name.index(
2
'Lily') name.index(
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'Lily' is not in list添加元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# 声明一个空列表 name = []
# append
'David') name.append(
# 打印列表 name
['David']
'Nick') name.append(
name
['David', 'Nick'] # .append()追加 在列表最后一个元素后边追加元素
'Jack','Lily'] new_name = [
name.append(new_name)
['David', 'Nick', ['Jack', 'Lily']]
# 我们看到结果是append 将一整个new_name作为一个整体传入name中作为一个元素
# extend
# 那其实我们还有另外一种添加的方法 .extend()
# .extend()可以把new_name中的元素一个一个加入到name中
'David','Nick'] name = [
'Jack','Lily'] new_name = [
name.extend(new_name)
['David', 'Nick', 'Jack', 'Lily']
# 那么如果想要在指定位置追加元素呢
'David','Nick','Rachel'] name = [
1,'Jim') # insert(你想插入的位置,插入的内容) name.insert(
name
['David', 'Jim', 'Nick', 'Rachel']删除元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35'David','Nick','Rachel','Rose'] name = [
# pop
# 默认删除列表最后一个元素 并且有返回值 ‘Rose’ 改变原列表 name.pop()
'Rose'
name
['David', 'Nick', 'Rachel']
1) # pop写入索引 按索引删除指定位置的元素 name.pop(
'Nick'
name
'David', 'Rachel'] [
# del
del name[0] # 按索引删除 name列表中的元素
name
['Rachel']
# remove
'David','Nick','Rachel','Rose'] name = [
0) # 尝试用索引 name.remove(
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
# 报错 参数x 不在list中
'Rachel') name.remove(
# 可以看出remove的参数 传入的必须是是list中的元素内容 name
['David', 'Nick', 'Rose']
# clear
# 不会返回一个列表,而是返回给你一个内存地址 name.clear()
<built-in method clear of list object at 0x1048b0148>
name.clear()
name
[] # 清空列表替换元素
1
2
3
4
5
6'David','Nick','Rachel','Rose'] name = [
1] = 'Mary' # 将索引[1]位置的元素替换成 'Mary' name[
name
['David', 'Mary', 'Rachel', 'Rose']
-1] = 'Jack' # 同理正反取索引 都以用来替换元素 name[
['David', 'Mary', 'Rachel', 'Jack']列表的嵌套
1
2
3
4
5
6
7
8
9
10
11'David','Nick','Rachel'] name = [
'Rose', name] name_2 = [
name_2
['Rose', ['David', 'Nick', 'Rachel']]
# 如何取值 取到'Nick'
# name_2 = ['Rose', name] 其实就是在name_2的列表中套了一个name
# 在这里可以把name看作是name_2中的元素
# 我们要取到name中的'Nick' 就需要先取值 取到name_2中的 name元素
# 然后再取 name 中的'Nick'元素 所以我们就可以怎么干
1][1] name_2[
'Nick'切片(有头,无尾,步长默认为1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22'David','Nick','Rachel','Rose'] name = [
0:3] # 返回值可以通过声明一个变量去接收 name[
['David', 'Nick', 'Rachel']
# 有头指的是从索引[0]开始,无尾是取不到索引[3]= 'Rose'位置的值
# 不会改变原列表 name
['David', 'Nick', 'Rachel', 'Rose']
0:4:2] name[
# 这里没有报超出索引范围的错误,可以看出只取到了[3]
# 默认步长为1,这里改为2,意思就是为 一个 隔 一个 取值
['David', 'Rachel']
0:] # 意思为 从列表的头,取到列表的尾巴,就是取到元素最后一个值 name[
['David', 'Nick', 'Rachel', 'Rose']
1:] name[
['Nick', 'Rachel', 'Rose']
-2:] # 从倒数第二个值开始取,取到列表的尾巴 name[
['Rachel', 'Rose']
-1] # 从最开头,取到倒数第一个值,有头无尾,所以不会取最后一个值 name[:
['David', 'Nick', 'Rachel']
-2] name[:
['David', 'Nick']
# 不传入任何参数,就是从头取到尾 name[:]
['David', 'Nick', 'Rachel', 'Rose']成员运算 in和not in
1
2
3
4
5
6
7'David','Nick','Rachel','Rose'] name = [
'David' in name # 判断name这个列表中是否有'David',然后返回一个布尔值
True
'Lily' in name
False
'Lily' not in name # 判断name这个列表中 没有'Lily',然后返回一个布尔值
True循环
1
2
3
4
5
6
7
8'David','Nick','Rachel','Rose'] name = [
for item in name:
# for 循环通常用来取值 这里将name列表中的元素一个一个取出来
print(item)
David
Nick
Rachel
Rose排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20'David','Nick','Rachel','Rose'] name = [
# reverse 反转列表
# 直接改变原列表,反转 name.reverse()
name
['Rose', 'Rachel', 'Nick', 'David']
'David','Nick','Rachel','Rose'] name = [
-1] # 通过切片的方式反转列表 name[::
['Rose', 'Rachel', 'Nick', 'David']
# sort 对原列表排序
'David','Nick','Rachel','Rose'] name = [
True) # 直接改变原列表,反转,无返回值 name.sort(reverse =
name
['Rose', 'Rachel', 'Nick', 'David']
# 默认参数 sort(cmp = None,key = None,reverse = False)
# cmp: 按照传入参数的方法进行排序,还没学到
# key:主要用来进行排序,只有一个参数,具体的函数参数取自可迭代对象中,指定可迭# 代对象中的一个元素来进行排序(先不管,还没法理解)
# reverse = False(默认序列) reverse = True (反转序列)