本文主要是介绍Preparatory Class-Day6------序列类型---------列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、定义: 可以存储多个元素的数据类型
变量名 = [元素1, 元素2, ... ]定义空列表: a=[] (# 类似字符串 a='')
二、特点:
(1) 列表是有序的;
(2) 变量名--->列表对象---->各个元素值,逐个绑定
(3) 列表可以有多种元素类型
(4) 列表中的元素可以修改
内存分配机制:
- 当创建N个元素的List时,Python的动态内存分配长N+1个元素的内存,第一个元素存储列表长度,和列表的元信息。如下图。
三、列表的操作(运算符、索引、切片)---新创建
1. 运算符 + * in is >,+ 号用于组合列表,* 号用于重复列表。
* 注意列表list 不是基础数据类型,==对象的is不同,即为 不同对象。* 列表的整切片是新创建对象
eg.
names = ['tom','jerry, 'kate']name = ['tom','jerry, 'kate']print(a+b) #append()print(a*3) #重复成新列表print(name in names)
运行结果:
['tom', 'jerry', 'kate', 'tom', 'jerry', 'kate']
['tom', 'jerry', 'kate', 'tom', 'jerry', 'kate', 'tom', 'jerry', 'kate']
False
2. 索引
index() · 整数,负数,· 越界会出现异常, (-len, len -1)
访问嵌套列表: 列表名[i][j]
eg.print(name == names)print(name is names)print(id(name[1]), id(name[1])
plactice:# 1. 对换列表元素name[i], name[j] = name[j],name[i]# 2. 列表遍历替换names = ['~'+i+'~' for i in name]
3. 常用函数
类型 | 方法 | 说明 | 参数 |
增 | list.append(obj) | 在列表末尾添加一个新的对象 | 不管这个对象是什么数据类型, append()都会以一个新元素的方式追加至结尾 |
list.extend(seq) | 在列表末尾追加多个值 | seq以元素列表的形式进行追加, extend()相当于合并两个列表 | |
list.insert(index, obj) | 将指定对象插入列表的指定位置。 | index -- 对象obj需要插入的索引位置。 obj -- 要插入列表中的对象。 | |
删 | list.pop(obj=list[-1]) | 移除列表中的一个元素, 并且返回该元素的值。 | 不填写参数,默认最后一个元素 pop()方法带返回值 |
del list[index] | 根据index索引删除列表中的一个元素 | 不填写参数,默认最后一个元素 del 不带返回值 | |
list.remove(obj) | 函数用于移除列表中某个值的第一个匹配项。 | 该方法没有返回值 但是会移除两种中的某个值的第一个匹配项。 | |
改 | list[index]=new_obj | 根据索引位置直接赋值即可 | |
查 | list[index] | 可以直接根据索引值查询 |
|
list[start:end] | 也可以通过遍历索引的方式查询多值 |
| |
list.index(obj) | 函数用于从列表中找出某个值第一个匹配项 的索引位置。 | obj -- 查找的对象。 | |
max(list) | 返回列表元素中的最大值 | list -- 要返回最大值的列表 | |
min(list) | 返回列表元素中的最小值 | list -- 要返回最小值的列表。 | |
统计 | list.count(obj) | 统计某个元素在列表中出现的次数 | obj -- 列表中统计的对象。 |
len(list) | 统计列表中的元素个数 | list -- 要计算元素个数的列表。 | |
排序 | list.sort([func]) | 函数用于对原列表进行排序 | func -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。 |
list.reverse() | 函数用于反向列表中元素 | 该方法没有返回值, 但是会对列表的元素进行反向排序。 | |
复制 | list.copy() | 函数用于复制列表,类似于list_copy[:] | 返回复制后的新列表 |
清空 | list.clear() | 函数用于清空列表,类似于del list[:] | 该方法没有返回值 |
(表格引用自https://www.cnblogs.com/hezhefly/p/7908460.html)
五、列表的拷贝
在拷贝后,原变量的修改,会对拷贝结果造成影响:
1. 赋值法, 原变量的修改完全修改了拷贝结果;
2. 浅拷贝, 原变量的修改会对列表元素的子对象造成影响;
3. 深拷贝, 原变量的修改不影响拷贝结果。
import copya = [1, 2, 3, 4, ['a', 'b']] # 原始对象b = a # 赋值,传对象的引用c = copy.copy(a) # 对象拷贝,浅拷贝m = a[:]d = copy.deepcopy(a) # 对象拷贝,深拷贝a.append(5) # 添加对象aa[0] = 'new'a[4].append('c') # 修改对象a中的['a', 'b']数组对象print('修改 a = ', a)print('赋值 b = ', b, end = '会把复制变量完全修改\n')print('浅拷贝 c = ', c, end = '修改会影响复制变量元素层的子层\n')print('整切片 c = ', m, end = '修改会影响复制变量元素层的子层\n')print('深拷贝 d = ', d, end = '修改完全不影响复制变量\n')y
运行结果:
修改 a = ['new', 2, 3, 4, ['a', 'b', 'c'], 5]
赋值 b = ['new', 2, 3, 4, ['a', 'b', 'c'], 5]会把复制变量完全修改
浅拷贝 c = [1, 2, 3, 4, ['a', 'b', 'c']]修改会影响复制变量元素层的子层
整切片 c = [1, 2, 3, 4, ['a', 'b', 'c']]修改会影响复制变量元素层的子层
深拷贝 d = [1, 2, 3, 4, ['a', 'b']]修改完全不影响复制变量
深拷贝后数值拷贝情况 1808421728 1808421728
六、一些小点
1. map() 方法 使用指定方法去作用传入的每个可迭代对象的元素,生成新的可迭代对象
map(function, iterable, ...)
参数
- function -- 函数,有两个参数
- iterable -- 一个或多个序列
返回值
Python 2.x 返回列表。
Python 3.x 返回迭代器(需要加一个list()方法)。
b = list(map(float, a))
等同于
b = [float(i) for i in a]
- 功能同列表生成器 ,对可迭代的序列对象进行逐个修改
这篇关于Preparatory Class-Day6------序列类型---------列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!