0
点赞
收藏
分享

微信扫一扫

python学习day04_列表

他说Python 2022-04-25 阅读 126
python

目录

一、列表

1.1 什么是列表

列表就是就是使用一对中括号 " [] " 将所有准备放入列表中元素包裹起来,不同元素之间以逗号 “,” 分隔。
eg:
在这里插入图片描述
但若想按顺序访问序列列表上的每一个元素,可以使用for循环:
在这里插入图片描述
获取指定索引的值:
在这里插入图片描述

1.2 列表切片

在这里插入图片描述

1.3 列表的增删改查

1.3.1 增

append(): 在末尾添加一个元素
extend(): 参数必须是一个可迭代对象,新的内容是追加到原列表最后一个元素后面。
insert(索引,元素): 第一个参数指定待插入的位置,第二个参数指定插入元素。
在这里插入图片描述

1.3.2 删

remove(): 如果列表中存在多个匹配的元素,那么它只会删除第一个。
如果指定的元素不存在,那么程序就会报错。
pop(索引):删除指定位置的元素。
clear(): 清空列表元素。
在这里插入图片描述

1.3.3 改

列表是可变的,而字符串是不可变的。但都可以使用下表索引的方法,使用赋值运算符将新的值替换进去。

替换其实是分两步完成的:
a. 将 = 左边指定的内容删除;
b. 将 = 右边的可迭代对象中的片段插入左边被删除的位置。
在这里插入图片描述
sort(): 按从小到大的顺序进行排序。
sort(key=None, reverse=False): 对列表中的元素进行原地排序,(key参数用于指定一个用于比较的函数;reverse函数用于指定排序结果是否反转)
reverse(): 顺序颠倒,只进行调换顺序,而不是排序。
在这里插入图片描述

1.3.4 查

count(): 查找某个元素出现的次数。
index(): 查找某个元素的索引值。
如果有多个相同元素,会返回第一个找到的元素下标值。
index(x,start,end): 指定查找的开始和结束位置。
shallow copy 浅拷贝:
copy(): 拷贝一个列表
列表名[:]:使用切片进行拷贝

在这里插入图片描述

1.4 列表的加法和乘法

concatenation and multiplication of list
列表的乘法:重复列表内的所有元素若干次。

在这里插入图片描述

1.5 嵌套列表

nested list
在这里插入图片描述

1.6 访问嵌套列表

access nested list
在这里插入图片描述

列表名[x]: 如果只给出一个下标索引的话,得到以行为单位的整个列表,而非嵌套列表中的元素。
列表名[n][m]: 访问列表中第n行,第m列。想要访问列表中的列表元素,需要使用两次下标索引。
在这里插入图片描述

可以通过循环语句来创建并初始化二维列表:
在这里插入图片描述
B 修改一个元素,影响三个元素,是因为内部嵌套的列表不是三个独立的列表,而是对同一个列表的三次引用。
可以通过 is 运算符来比较 A[] B[] 列表里是否是同样的元素。

1.7 is运算符

is operator
字符串不可变,列表可变。
在这里插入图片描述
在这里插入图片描述
A 是先创建一个列表 A[], 复制三份,然后再给里面填充元素。
在这里插入图片描述

B 对于内嵌的列表只是拷贝了列表的引用,而非物理上的拷贝。
在这里插入图片描述

1.8 变量不是盒子

Variables are not boxes

不可以直接使用赋值的方式来拷贝一个列表,赋值只是赋给的是引用。
在这里插入图片描述

若想复制一模一样的列表,只能使用拷贝。

二、 浅拷贝和深拷贝

shallow and deep copy

2.1 浅拷贝

copy(): copy()方法拷贝的是整个列表的对象,而不仅是变量的引用。
y = x.copy(): 切片拷贝。
在这里插入图片描述
浅拷贝只拷贝了外层的对象,对于嵌套列表的话只是拷贝了其引用。
在这里插入图片描述
🌟 所以浅拷贝只适用于一维列表,要对二维列表进行拷贝需使用到深拷贝。

2.2 深拷贝

copy.copy():浅拷贝, copy模块的copy() 函数。
copy.deepcopy():深拷贝,函数将原对象拷贝的同时,也将对象中所有引用的子对象一并进行拷贝。

eg:
copy.deepcopy() 深拷贝
在这里插入图片描述
copy.copy() 浅拷贝
在这里插入图片描述

三、列表推导式

list comprehension expression

  1. 请问如何将列表中的每一个元素的值都变成原来的2倍?
    在这里插入图片描述
    列表推导式在python解释器里是以更快的C语言的速度来运行的,所以比使用python脚本的虚拟机pvm运行的for循环的速度快很多。

  2. 那么列表推导式是如何构建的?

[expression for target in iterable]

列表推导式首先是一个列表,使用数据来填充列表,需要for语句来搭配,expression相当于一个表达式,相当于循环体,经过运算才决定存放在列表中的数据。

eg:
列表推导式存放数值
在这里插入图片描述
列表推导式存放字符串
在这里插入图片描述

  1. 如何将所有的字符都转换成对应的Unicode编码并保存为列表?
    ord(): ord() 内置函数将单个字符串转换为对应的编码。
    在这里插入图片描述
  2. 如何通过列表推导式将矩阵matrix第二列的元素提取出来?

先通过for循环取出每一行,再通过 row[1] 过滤下标为1 即第二列的元素:
在这里插入图片描述

  1. 如何通过列表推导式将矩阵matrix ↘️斜对角的元素提取出来?

matrix[i][i] 内的值是相同的,即第i行第i列,所以为对角线的值。此处 i = range(3),将 i = 0, 1, 2 带入matrix[i][i]
从for循环里拿出来的只是对应的索引值 [0] [1] [2],即matrix[0][0], matrix[1][1], matrix[2][2].
在这里插入图片描述

  1. 如何取 矩阵matrix ↗️ 斜对角的元素?
    在这里插入图片描述

  2. 循环与列表推导式是一样的吗?
    不一样,因为循环是通过迭代来逐个修改原列表中的元素,而列表推导式则是直接创建一个新的列表,然后再赋值为原先的这个变量名。

  3. 使用列表推导式创建一个嵌套列表
    在这里插入图片描述

  4. 列表推导式还可以添加一个用于筛选的if分句:
    语法:

[expression for target in iterable if condition]

执行顺序:先执行 for语句 再执行if语句 最后执行for左边的表达式。

eg:
分别筛选出10以内的偶数和奇数:
在这里插入图片描述

eg:
筛选出以下字符串中以 “C” 开头的单词:
在这里插入图片描述

  1. 列表推导式实现嵌套
    语法:
[expression for target1 in iterable1
			for target2 in iterable2
			...
			for targetN in iterableN]

嵌套的列表推导式对应嵌套的循环。

eg:
将二维列表铺开,即进行降维。
在这里插入图片描述

eg:
将 x y 两个字符串相加组成一个新的列表:
在这里插入图片描述

  1. 列表推导式的终极语法:
[expression for target1 in iterable1 if condition1
			for target2 in iterable2 if xondition2
			...
			for targetN in iterableN if conditionN]

eg:
输出一个列表 [x,y], x是偶数,y是奇数:
在这里插入图片描述

tips:如果某个变量是临时的或无关紧要的,可直接使用下划线 "_"当变量名。
一定注意缩紧!!!!!!!!!!!!!!!!!!!!!!!

KISS原则:Keep It Simple & Stupid.

举报

相关推荐

0 条评论