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