正文:
本章内容会很长,所以我打算分两期出,本章分为三个大模块:列表、元组、字典。我们先将一下序列的常用操作,和列表。等第二期在讲元组和字典。
序列常用操作:
序列:一块用于存放多个值的连续内存空间,并按一定顺序排列(相当于数组)。序列结构主要包括:列表、元组、字典
索引:序列中每个元素的编号。这个编号是从0开始的。
但是有一点要说的是:索引可以为负数(是不是很神奇)而且为负数时,倒数第一个数为 -1 。我们可以通过索引来访问序列中任何元素。
下面说几个序列常见操作:
一、切片:
格式:
sname[start : end : step]
参数 | 含义 |
sname | 表示序列名称。 |
start | 切片开始位置(包括开始位置)可以省略,省略默认为0; |
end | 切片结束位置(不包括结束位置)可以省略,省略默认为序列长度; |
step | 表示切片步长,省略默认为 1 |
代码如下:
ls=["好好学习","天天向上","加油","小王"]
print(ls[:]) #复制整个序列
print(ls[1:3]) #获取从第二个到第三个元素
运行结果如下:
二、序列相加
在python中支持两种相同类型的序列相加,即两个序列进行连接
相同类型:同为列表、同为元组、或者同为集合,序列中的元素类型不一样没事。
代码如下:
ls1=["好好学习","天天向上","加油","小王"]
ls2=[12,33,45,56,98]
print(ls1+ls2)
运行结果如下:
三、序列相乘:
在python中使用数字 n 乘以一个序列会产生生成新的序列,新序列的内容为原来内容的重复 n 次的结果
代码如下:
ls=["好好学习","天天向上","加油","小王"]
print(ls*3) #复制三遍
ls1=[None]*5
print(ls1)
运行结果如下:
我想吐槽一下:这个编译器 L 和 1 太难区分了,我上面写的代码第一个是 L 第二个是 1 ,你们看出来了吗?也希望大家命名的时候尽量避开这两个字母,害!真是的,好烦啊!
四、检查某个元素是否为序列成员
检查是否为序列成员用关键字 in 。
格式:
value in sequence
参数 | 含义 |
value | 表示要检查元素 |
sequence | 表示指定序列 |
它的返回值是 bool 值。
代码如下:
ls=["好好学习","天天向上","加油","小王"]
print("小王" in ls)
运行结果如下:
五、计算序列的长度、最大值、最小值
这都是python的内置函数,很多吧!赶紧去记吧!
(1)计算序列长度:使用 len() 函数
(2)计算最大值:使用max()
(3)计算最小值:使用min()
代码如下:
num = [28,36,43,83,93,28,84,92]
print("序列num的长度为",len(num))
print("序列num的最大值为",max(num))
print("序列num的最小值为",min(num))
运行结果如下:
列表
我们刚刚举得例子都是列表,它就是用一对中括号括着每个元素之间用 ","分割元素内容可以类型不一样
格式:
listname = [element1,element2,element3,element4]
虽然列表元素类型可以不一样,但是我们不用,哎!就是玩。(提高程序可读性)
(1)创建空列表
list = [] #创建空列表
(2)创建数值列表
list()函数基本用法
list(data)
data:表示可以转换为列表的数据,例如:range对象、字符串、元组等等。
ls=list(range(10,20,2)) #输出[10, 12, 14, 16, 18]
(3)删除列表
这个说不说都一样,python自带回收机制,所以你不删也没事。简单提一下:
del listname
listname:要删除列表名称。
(4)访问列表元素
可以直接通过索引来进行访问
代码如下:
num = [28,36,43,83,93,28,84,92]
print(num[4])
print(num[-1])
运行结果如下:
这里说一下:索引是从0开始的,如果用负数表示的话,最后一个数为 -1
(5)遍历列表
1.用for循环进行遍历
for item in listname:
#输出item
item:保存获取到的元素值
2.使用for循环和enumerate()函数实现
格式:
#输出index和item
for index,item in enumerate(listname):
参数 | 含义 |
item | 保存获取到的元素值 |
index | 保存元素的索引 |
listname | 列表名称 |
代码如下:
name = ["王源","王俊凯","易烊千玺","黄磊","何炅","杨洋"]
for index,item in enumerate(name):
print(index+1,item)
运行结果如下:
(6)添加、修改、删除列表元素
1.添加元素
之前讲过用 + 连接两个序列,那样是可以的,我们介绍另外一种方式:append(),它是在列表末尾添加元素
格式:
listname.append(obj)
参数 | 含义 |
listname | 列表名称 |
obj | 为要添加到列表末尾的对象 |
代码如下:
name = ["王源","王俊凯","易烊千玺","黄磊","何炅"]
print(name)
name.append("杨洋")
print(name)
运行结果如下:
另外还有extend(),它可以把列表添加到另一个列表末尾(类似于+的功能)
listname.extend(seq)
seq:要添加的列表
这个就不给大家举例子了,和append用法一样。
(7)修改元素
修改元素就和访问元素一样,直接通过索引来修改就可以了
代码如下:
name = ["王源","王俊凯","易烊千玺","黄磊","何炅"]
print(name)
name[0]="张子枫"
print(name)
运行结果如下:
(8)删除元素
1.根据索引删除
我们还是可以用 del 语句删除
代码如下:
name = ["王源","王俊凯","易烊千玺","黄磊","何炅"]
print(name)
del name[3]
print(name)
运行结果如下:
2.根据元素值删除
如果不知道元素所在的索引值,只知道要删除元素值可以用 remove() 方法实现。
代码如下:
name = ["王源","王俊凯","易烊千玺","黄磊","何炅"]
print(name)
name.remove("王源")
print(name)
运行结果如下:
但是这么用有一点点问题:如果元素值不在这个序列中,我们用了 remove 那莫我们的编译器会报错。所以我们应该先判断这个元素值是否存在,如果存在我们再进行删除。所以我们对代码进行修改一下。
name = ["王源","王俊凯","易烊千玺","黄磊","何炅"]
print(name)
if name.count("王源")>0:
name.remove("王源")
print(name)
运行结果和上面结果一样,count()函数用于判断元素出现次数,我们等一下就说。
(9)对列表进行统计计算
1.获取列表对象出现次数
格式:
listname.count(obj)
obj:表示要判断是否存在的对象
如果返回值是 0 的话表示列表中不存在该元素值
代码如下:
name = ["王源","王俊凯","易烊千玺","黄磊","何炅"]
print(name.count("张子枫"))
print(name.count("王俊凯"))
运行结果如下:
2.获取指定元素首次下标
格式:
listname.index(obj)
参数 | 含义 |
listname | 列表名称 |
obj | 表示要查找的对象,如果查找对象不存在,系统会报错。所以和刚刚一样,我们可以用count函数 |
它的返回值即为 首次出现的索引值
3.统计数值列表的元素和
可以用sum()函数统计数值列表中各元素的和
格式:
sum(iterable[,start])
参数 | 含义 |
iterable | 表示要统计的列表 |
start | 表示统计结果再加上start值,没有默认为0 |
例如:
num = [28,36,43,83,93,28,84,92]
sum1=sum(num)
sum2=sum(num ,29) #num的和加上29
print(sum1) #487
print(sum2) #516
(10)对列表进行排序
1.使用列表对象的 sort ()方法实现
用 sort()函数实现,对于原列表中元素顺序进行排序,排序后原列表发生改变。
格式:
listname.sort(key=None,reverse=False)
参数 | 含义 |
listname | 进行排序列表的名称 |
key | 表示指定每个列表元素中提取比较键 |
reverse | 可选参数,如果将值指定为 True,表示降序排列、指定为 False 表示升序排列,默认为升序排列。 |
对于key参数,我们在对字符串进行排序时sort()函数一般默认先对大写字母进行排序,在对小写字母进行排序。如果想要不区分大小写时,就需要指定key参数。我们指定 key=str.lower来进行不区分大小写操作。
举个例子,代码如下:
num = [93,92,33,48,293,12,89,59,58]
num.sort()
print("升序:",num)
num.sort(reverse=True)
print("升序:",num)
str1 = ["Tom","cat","Angela","pet","Zoo"]
str1.sort()
print("区分字母大小写:",str1)
str1.sort(key=str.lower)
print("不区分字母大小写:",str1)
运行结果如下:
2.使用内置函数sorted()实现
区别一下这两个函数,一个加 ed 另一个不加。sorted与它最大的区别就是,该函数再进行排完序之后,不会对原列表进行改变,而是先生成一个副本,然后在副本内进行排序。
格式:
listname_s=sorted(listname,key=None,reverse=False)
参数 | 含义 |
listname_s | 生成副本的名称 |
listname | 要排序的列表 |
key | 表示指定每个列表元素中提取比较键 |
reverse | 可选参数,如果将值指定为 True,表示降序排列、指定为 False 表示升序排列,默认为升序排列。 |
这个 key 和 reverse 的用法都是和第一个函数用法一样,包括key的字符大小写的问题。这里就不再赘述了。只要记住两个函数的区别久好很掌握了。
(11)列表推导式
使用列表推导式可以快速生成一个列表,或者根据要求生成指定的列表。
1.生成指定范围的数值列表
格式:
listname = [Expression for var in range]
参数 | 含义 |
listname | 生成的列表的名称 |
Expression | 表达式,用于计算新列表的元素 |
var | 循环变量 |
range | 采用range()函数生成range对象 |
代码如下:
listname = [x*3 for x in range(1,10,2)]
print(listname)
运行结果如下:
2.根据列表生成指定需求的列表
格式:
newlist = [Expression for var in list]
参数 | 含义 |
newname | 生成的列表的名称 |
Expression | 表达式,用于计算新列表的元素 |
var | 变量,值为后面列表的每个元素值 |
list | 用于计算生成新列表的原列表 |
代码如下:
pince = [1200,1500,3984,2827,9382,2938]
sale = [int(x*0.5) for x in pince]
print("原来价格:",pince)
print("打五折后价格:",sale)
运行结果如下:
3.从列表选择符合条件的元素值组成新的列表
格式:
newlist = [Expression for var in list if condition]
参数 | 含义 |
newname | 生成的列表的名称 |
Expression | 表达式,用于计算新列表的元素 |
var | 变量,值为后面列表的每个元素值 |
list | 用于计算生成新列表的原列表 |
condition | 条件表达式,用于指定筛选条件 |
代码如下:
pince = [1200,1500,3984,2827,9382,2938]
sale = [x for x in pince if x>2000]
print("原来价格:",pince)
print("大于2000价格:",sale)
运行结果如下:
到这列表的知识就这些了