鄙人学习笔记
开发工具:Spyder
列表list
定义
由一系列变量组成的可变序列容器
图示:
基础操作
基本操作 | 方式 |
---|---|
创建列表 | ①[] ②list(可迭代对象) |
添加元素 | ① insert②append |
获取元素 | ①索引②切片 |
删除元素 | ①remove②del |
举个例子
代码:
# 1. 创建空列表
list01 = []
list01 = list()
print(list01)
# 2. 创建具有默认值的列表 [元素1,元素2....] list(可迭代对象)
list02 = [1, True, 1.2]
list02 = list("abcd")# ['a', 'b', 'c', 'd']
list02 = list(range(5))
print(list02)
# 3. 添加元素
# append 在末尾追加
list02.append("q")
list02.append("t")
print(list02)
# insert 插入(索引,元素)
list02.insert(1,"x")
print(list02)
# 4. 删除元素
# 移除指定的元素
list02.remove(2)
print(list02)
# 删除指定索引的元素
del list02[1]
print(list02)
结果:
列表VS字符串
①列表和字符串都是序列,元素之间有先后顺序关系。
②字符串是不可变的序列,列表是可变的序列。
③字符串中每个元素只能存储字符,而列表可以存储任意类型。
④列表和字符串都是可迭代对象。
拼接和拆分
①将多个字符串拼接为一个
- 函数
"连接符".join(列表)
- 例子
代码:
list01 = ['a', 'b', 'c', 'd']
result = "-".join(list01)
print(result)
结果:
②将一个字符串拆分为多个
- 函数
列表.split("分隔符")
- 例子
代码:
reason = "a-b-c-d"
list02 = reason.split("-")
print(list02)
结果:
浅拷贝VS深拷贝
-
浅拷贝
是在赋值过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程。 -
深拷贝
复制整个依赖的对象。 -
深拷贝和浅拷贝的区别
①如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。
②如果拷贝的对象里的元素包含引用(像一个列表里储存着另一个列表,存的就是另一个列表的引用),那浅拷贝和深拷贝是不同的,浅拷贝虽然将原有对象复制一份,但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。而深拷贝则不同,它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开。
- 针对引用数据类型深拷贝和浅拷贝的示意图
- 赋值和浅拷贝的区别
①当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的地址。
②浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是引用类型,拷贝的就是内存地址 。
- 举个例子
代码:
import copy
list01 = [1, [2, 3]]
#浅拷贝
list02 = list01[:]
list03 = list01.copy()
list04 = copy.copy(list01)
#深拷贝
list05 = copy.deepcopy(list01)
#赋值
list06 = list01
list01[1][0] = 10
print(list01,'\n', list02, '\n',
list03, '\n', list04, '\n',
list05, '\n', list06)
print(id(list01), '\n', id(list02),'\n',
id(list03), '\n', id(list04), '\n',
id(list05), '\n', id(list06))
结果:
PS:深拷贝VS浅拷贝参考文献
python中copy()和deepcopy()详解
浅拷贝和深拷贝的区别?
彻底讲明白浅拷贝与深拷贝
列表推导式
- 语法
[对变量的操作 for 变量名 in 可迭代对象 if 条件]
- 例子1
代码:
list01 = [3,4,5,6,7,8,9]
# 列表推导式
list02 = [item ** 2 for item in list01]
list03 = [item ** 2 for item in list01 if item % 2 == 0]
print(list02)
print(list03)
结果: