列表
特点:
1.是有序的
2.可以重复的
3.可变类型
1.创建和删除列表
通过 []
创建或者 list()
函数转化
list_name=['a', 'b']
list_name = [] # 创建空列表
list_name = list(range(0, 100, 2)) # 通过list函数转化得到列表
del list_name # 删除列表
2.增加列表元素
2. 1 list.append(x)
:尾部添加单个元素
ls = []
for each in range(100):
if each % 2 == 0:
ls.append(each)
2. 2 list.extend(last_x)
:尾部添加一个列表所有元素
ls = [1, 2, 3]
ls_extend = [4, 5, 6]
ls.extend(ls_extend) # 也可以在中间位置插入一个列表的所有元素
ls[1:1] = ls_extend
2. 3 list.insert(index, obj)
:指定位置插入元素
ls = [1, 2, 4]
ls.insert(1, 88)
print(ls) # out: 1, 88, 2, 4
3.删除列表元素
3. 1 list.pop([index])
:删除指定index元素,默认是最后一个,并返回删除元素
整体返回: 返回pop()
,删除的最后一项数据
是否改变原列表: 改变原列表
ls = [1, 2, 3]
ls.pop(1) # out: 2
3. 2 list.remove(x)
:删除元素
ls = [1, 2, 3]
del ls[2] # 删除指定索引列表元素:3
ls.remove(2) # 移除列表元素:2
3. 3 list.clear()
:清空列表中的所有元素
ls = [1, 2, 3, 4]
x.clear() # 清空所有元素
4.修改列表元素
# 通过下标修改
ls = [1, 2, 3]
ls[1] = 88
print(ls) # out: [1, 88, 3]
# 通过切片修改
ls = [1, 2, 3]
ls[0:2] = ["6", "7"]
print(ls) # out: [6, 7, 3]
5.查找列表元素
5. 1 直接通过下标查找
ls = [1, 2, 3]
print(ls[0]) # out:1
5. 2 list.index(v [, begin[, end]])
:获取指定元素的索引号
ls = [1, 2, 3]
ls.index(2) # out:1
6.排序、反转和复制
6. 1 list.sort(key=None, reverse=False)
:排序
key用来指定排序规则。reserve = Flase 升序/正向排序(默认),True降序/反向排序;函数本身不会返回
不传参数就默认排序,可以传入一个函数作为参数,自定义排序规则
整体返回: 返回排序的列表
是否改变原列表: 改变原列表
ls = [1, 3, 8, 2]
ls.sort(key=None, reverse=True) # out: [8, 3, 2, 1]
'''两者区别:sorted方法不会改变原来list,而是会返回一个新的已经排序好的list'''
ls_1 = [1, 3, 2, 4]
ls_1 = sorted(ls_1, key=None, reverse=True)
print(ls_1) # out: [4, 3, 2, 1]
6. 2 list.reverse(x)
:列表元素反转
该方法无须传参数
整体返回: 返回翻转后的列表
是否改变原列表: 改变原列表
ls = [1, 5, 2]
ls.reverse()
print(ls) # out: [2, 5, 1]
6. 3 list.copy()
:浅复制列表
ls = [1, 2, 3, 4]
ls_copy = ls.copy()
print(ls_copy) # out: [1, 2, 3, 4]
7.列表操作函数
7. 1 min()、max()、sum()、len()
:找最小值、最大值、求和(元素为数值型)、长度
ls = [1, 2, 4]
ls_sum = sum(ls) # 7
ls_min = min(ls) # 1
ls_max = max(ls) # 4
ls_len = len(ls) # 3
7. 2 list.count(x)
:获取列表中元素出现的次数
ls = [1, 2, 1, 5, 2]
ls.count(2) # out: 2
7. 3 tuple()
:将列表转化为元组(元组元素不可变)
ls = [1, 2, 3]
tup = tuple(ls)
print(tup) # out: (1, 2, 3)
8.列表切片
方法 :list[ start : end : step ]
start :切片的起始位置
end :是切片的结束位置(不包括)
step :可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。步长是正数,从左往右取;步长是负数,从右往左取。
出现情况:
①list[start : end] 切片是不包含后面那个元素的值(顾头不顾尾)
②list[ : end] 如果切片前面一个值缺省的话,从开头开始取
③list[start : ] 如果切片后面的值缺省的话,取到末尾
④list[ : ] 如果全部缺省,取全部
⑤list[start : end : step]
- 如果第一个索引是
0
,还可以省略
ls = [1, 2, 4, 7, 88]
var = ls[:2]
print(var) # out:[1, 2]
- 支持负数
ls = [1, 2, 4, 7, 88]
a = ls[-1] # out: 88
b = ls[:-1] # out: [1, 2, 4, 7]
c = ls[:-2:] # out: [1, 2, 4]
d = ls[-2:] # out: [7, 88]
e = ls[-2:-1] # out: [7]
f = ls[::-1] # out:[88, 7, 4, 2, 1]
print(a, b, c, d, e, f)
- 拓展:二维列表及其切片
a=[['a', 'b', 'c'], [1, 2, 3]]
a[1][2] # out: 3
9.列表推导式
[expression for var in list]
a =[1, 3, 5, 6, 9]
b = [x**2 for x in a]
print(b) # out: [1, 9, 25, 7, 10]
def f(data):
return data + 1
b = [f(x) for x in a] # 使用自定义函数
print(b) # out: [2, 4, 6, 7, 10]
[expression for var in list if condition]
a =[1, 3, 5, 6, 9]
b = [x**2 for x in a if x > 3]
[expression if condition else expression for var in list]
a =[1, 3, 5, 6, 9]
b = ['奇数' if x%2 != 0 else '偶数' for x in a]
[x for a in b for x in a]
:二维列表推导式应用
'''对列表中元素为列表的所有子元素求和'''
l = [[1, 2], 1, [1, 2, 3], 4, [6, 7]]
s = sum([x for y in l if isinstance(y, list) for x in y])
'''我们把列表推导式展开,这样获取变得好结构清楚些'''
def list_expend():
ls = []
for y in l:
if isinstance(y, list):
for x in y:
ls.append(x)
return ls
10.列表拆包
某些情况下,我们可能需要取列表中的几个值,这样我们可以使用了列表切片来逐一赋值,此外我们还可以使用‘*’列表拆包一步到位。
prop = ['张三', '男', '70kg', 18, '178cm']
'''我们获取列表中的姓名和性别元素'''
name,sex = prop
print(name,sex) # out: ('张三', '男')
'''姓名,年龄,身高'''
name,age,height = prop
print(name,age,height) # out: ('张三', 18, '178cm')
'''成绩:去除最大值最小值='''
grade = [80, 75, 23, 100, 85]
grade_valid = sorted(grade)
print(grade_valid) # out: [75, 80, 85]
11.slice()
截取方法
通过slice(start, end)
(在原有列表中窃取新列表)生成可切片对象,赋值给变量,很多时候往往使得代码可读性更好
start : 截取列表开始的下标;
end: 截取列表结束时的下标,窃取的列表不包含这个下标对应的内容;若end参数省略,将截取从start开始的剩余所有内容。
整体返回:返回截取后的新列表
是否改变原列表:不改变原列表
dt = '20190714'
year = slice(0, 4) # 生成切片对象slice
print(dt[year]) # '2019'