1. 什么是列表 list
列表 list 是 Python 内置的一种数据类型。在[]用逗号分隔开多个任意类型的值,通常用来描述同一种类型的值,放入列表。
list 的特点:
- 有序
- 存多个值
- 可以按索引村取值
- 可以随时添加和删除其中的元素
- 可变类型(可变:值可变,id不变)
- 不可hash
2. 如何使用列表 list
- 获取列表 list中元素的个数 - 1 
 2
 3
 4
 5- name = ['David','Nick','Rachel','Rose'] 
 # len() 是 Python 的内置函数之一,主要功能是返回对象的长度或者项目个数
 # 对象可以是(字符串、列表、元祖、集合、字典)
 len(name)
 4
- 取列表中重复的元素 - 1 
 2
 3- name = ['David','Nick','Rachel','Rose','Nick'] 
 name.count('Nick')
 2
- 按索引取值 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16- name = ['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
 7- name = ['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
 27- name = [] # 声明一个空列表 
 # 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
 35- name = ['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
 6- name = ['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
 11- name = ['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
 22- name = ['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
 7- name = ['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
 8- name = ['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
 20- name = ['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 (反转序列)