python第三课

接着第二课,继续补充列表的相关知识。

列表元素访问与计数

index()方法

使用列表对象的 index() 方法获取指定元素 首次出现 的下标,如果指定了在列表以外的元素,就会报错。
例子

alist=[2,5,4,1,6,9,7,8,4]
a=alist.index(4)
print(a)

在这里插入图片描述

count()方法

这个方法是用来统计指定元素在列表中出现的次数
例子

alist=[2,5,4,1,6,9,7,8,4]
a=alist.count(4)
b=alist.count(2)
c=alist.count(0)
print(a)
print(b)
print(c)

在这里插入图片描述

拷贝

浅拷贝

浅拷贝会创建新的对象,其内容是原对象的引用。
切片操作返回的是列表的浅拷贝:生成一个新的列表,并把原列表中所有元素的引用全都复制到新的列表中。
如果原列表中含有可变的数据类型,修改任意一个都会对另一个产生影响。(由于浅复制时只会把列表的阴影复制到新的列表中)

对赋值操作右侧的列表使用切片,并把切片的起止索引都留空(b=a[::])

这样就会产生一份原列表的拷贝,在改变非可变元素时,对;另外一个不会产生影响,但是改变可变元素时,两个列表都会同时改变
例子

alist=[123,"love",["python","world"]]
blist=alist[::]
print(alist)
print(blist)
x=id(alist)
y=id(blist)
print(x)
print(y)
print(alist is blist)
print(alist == blist)
blist[1]=234
print(alist)
print(blist)
blist[2].append('haha')
print(alist)
print(blist)

在这里插入图片描述
在这个例子中,就是对 alist 进行切片操作,在查询 alist和 blist 的储存位置后发现,这两个列表知识元素相同,储存的位置是不同的,换言之,这就是2个不同的列表,所以在对其不可变元素更改时,对另外一个是没有影响的,但是在对其中列表改变时,由于列表是一个可变的元素,所以对 alist 产生了影响。

对赋值操作左侧的列表使用切片,并且没有指定起止索引

在这时,系统就会把右侧的新值复制一份,并用这份拷贝来替换左侧列表的全部内容,而不会重新分配新的列表
例子

alist=[123,"love",["python","world"]]
blist=alist
print(id(alist))
print(id(blist))
alist[2]=99
print(alist)
print(blist)
print(id(alist))
print(id(blist))

在这里插入图片描述

深拷贝

在这里插入图片描述
深拷贝和浅拷贝的区别就是可变元素储存的地址是不同的,在做出改变时,互不影响。
但是在运用深拷贝时需要导入 copy,模块
例子

import copy
alist=[123,"love",["python","world"]]
blist = copy.deepcopy(alist)
print(id(alist))
print(id(blist))
blist[2].append('haha')
print(alist)
print(blist)
print(id(alist))
print(id(blist))

在这里插入图片描述

列表排序

在介绍排序之前,先介绍 random 模块和 lambda 函数
random 模块是用来产生随机数的,其中 shuffle 函数是用来打乱序列的顺序的
lambda 函数时匿名函数,其基本的格式为 lambda x,y:(x+y);其中““ x,y ””是这个函数中的参数,““(x+y)””是这个函数的返回值

使用列表对象的 sort() 方法

这个方法是进行原地排序,支持多种不同的怕排序方法,并且没有返回值,或者说没有返回空值
None
例子

import random
alist=[1,2,3,4,5,6,7,8,9,10]
random.shuffle(alist)#将序列随机打乱
print(alist)
alist.sort()#sort默认的是升序排列
print(alist)
alist.sort(reverse = True)#降序
print(alist)
alist.sort(key = lambda x:len(str(x)))#按照字符转的长度
print(alist)

在这里插入图片描述

使用内置函数 sorted() 对列表进行排序并返回新列表

例子

import random
alist=[1,2,3,4,5,6,7,8,9,10]
random.shuffle(alist)#将序列随机打乱
print(alist)
print(sorted(alist))#sorted默认的是升序排列
print(alist.sort())
print(sorted(alist,reverse = True))#降序
print(sorted(alist,key = lambda x:len(str(x))))#按照字符转的长度

在这里插入图片描述
由于sort()函数没有返回值所以直接用print进行输出只会输出None

使用列表对象的reverse()方法将元素原地逆序

import random
alist=[12,45,58,23,7,45,15,46,98,65,32]
alist.reverse()
print(alist)

在这里插入图片描述

使用内置函数 reversed() 对列表元素进行逆序排列并返回 迭代对象

import random
alist=[12,45,58,23,7,45,15,46,98,65,32]
blist=reversed (alist)
print(blist)
print(list(blist))

在这里插入图片描述

用于序列操作的常用内置函数

  1. len(列表):返回列表中的元素个数,同样适用于元组、字典、集合、字符串等。

  2. max(列表)、 min(列表):返回列表中的最大或最小元素,同样适用于元组、字典、集合、range对象等。

  3. sum(列表):对列表的元素进行求和运算,对非数值型列表运算需要指定start参数,同样适用于元组、range。

  4. zip()函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,如同拉拉链一样

  5. enumerate(列表):枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组。该函数对元组、字符串同样有效。

  6. 内置函数map()把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过函数func处理后的结果。

  7. 标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值

  8. 内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值