python基础(part7)--容器类型之列表

鄙人学习笔记
开发工具: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)

结果:

发布了116 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105087669