python--5--len()

学习目标:

  • len()#range,list,列表、元组,字符串,包括空格,返回字典的"键值对"个数

学习内容:

  1. len()#range,list,列表、元组,字符串,包括空格,返回字典的"键值对"个数

len()--返回对象长度

len()#range,list,列表、元组,字符串,包括空格,返回字典的"键值对"个数

len(object)

s = 'abcdef'

print(len(s))
>>>
6

lst = [1, 2, 3, 4]

tup = (1, 2, 3, 4)
st = set([1, 2, 3, 4])
len(lst) == len(tup)
len(st) == len(tup)
>>>
True
True

dic = {1: 'a', 2: 'b', 3: 'c'}

len(dic)
>>>
3
返回字典的"键-值对"个数。

其中,object可以是字符串、列表、元组、集合、字典或其他可迭代对象。

例如,我们可以使用len()函数来获取字符串中字符的数量:

s = "Hello, World!"

print(len(s)) # 输出 13

同样,我们也可以使用len()函数来获取列表、元组或集合中元素的数量:

lst = [1, 2, 3, 4, 5]

print(len(lst)) # 输出 5

tup = (1, 2, 3, 4, 5)

print(len(tup)) # 输出 5

set1 = {1, 2, 3, 4, 5}

print(len(set1)) # 输出 5

对于字典,len()函数将返回字典中键值对的数量:

d = {'a': 1, 'b': 2, 'c': 3}

print(len(d)) # 输出 3

总之,len()函数是一个很常用的函数,可以用来获取容器对象中元素的数量。

除了常见的容器对象之外,len()函数还可以用于其他对象,具体如下:

字符串

s = "Hello, World!"

print(len(s)) # 输出 13

列表

lst = [1, 2, 3, 4, 5]

print(len(lst)) # 输出 5

元组

tup = (1, 2, 3, 4, 5)

print(len(tup)) # 输出 5

集合

set1 = {1, 2, 3, 4, 5}

print(len(set1)) # 输出 5

字典

d = {'a': 1, 'b': 2, 'c': 3}

print(len(d)) # 输出 3

range对象

r = range(1, 6)

print(len(r)) # 输出 5

bytes和bytearray对象

b = b'hello'

print(len(b)) # 输出 5

ba = bytearray(b'hello')

print(len(ba)) # 输出 5

其他可迭代对象

例如,使用len()函数可以获取生成器中元素的数量:

gen = (x for x in range(10))

print(len(gen)) # 报错 TypeError: object of type 'generator' has no len()

需要注意的是,不是所有的可迭代对象都可以使用len()函数来获取元素的数量。如果对象没有定义__len__()方法,那么len()函数将无法获取其元素的数量,并且会报错。例如,上面的例子中,由于生成器没有定义__len__()方法,因此len()函数无法获取其元素的数量,会报错。

len()函数的语法
函数很简单,语法如下:
len(obj)
没错,传入一个obj参数。根据源代码中的解释,这个obj应该理解为一个容器(container),我们来看下源代码中,关于len()函数的注释。
Return the number of items in a container.
返回容器中的项目数
这样的解释简洁明了,比我们总结的好多了。
参数obj传入一个具体对象的实例,这个对象可以是Python内置类型,也可以是我们自定义的类型。
当然,如果是自定义类型,这里我们需要重写对象的__len__()方法才可以使用len()函数获取项目数或执行其它操作。
返回字符串的长度
可以使用len()获取一个字符串的长度
定义一个字符串
s = 'abcdef'
print(len(s))
>>>
6
获取编码的字节数
我们知道,汉字和英文字符在计算长度时,存在差异。比如:
s = '这是一段汉字'
计算长度
len(s)
>>>
6
输出结果为6,刚好6个字符。
但是,我们将汉字编码后,得到的结果会有变化:

True
我们看到,len()函数返回了序列容器的项目个数。
len(s.encode())
>>>
18
可以看到,
再使用GBK编码方式,我们试试看
len(s.encode("gbk"))
>>>
12
当使用GBK编码后,len()函数返回了12。
可以看出,len()在计算编码后的文字个数时,统计的是字节数。UTF-8编码后的汉字,每个文字占3个字节。使用GBK编码后,每个文字占2个字节。这里我们使用len()函数就计算了文字编码后的字节数。

返回列表、元组(序列对象)中项目的个数
同样,len()函数还可以返回列表、元组、集合等序列对象实例的个数
例如:
lst = [1, 2, 3, 4]
tup = (1, 2, 3, 4)
st = set([1, 2, 3, 4])
len(lst) == len(tup)
len(st) == len(tup)
>>>
True
True
我们看到,len()函数返回了序列容器的项目个数。

返回字典(映射对象)的键的个数
在此基础上,len()函数还可以返回映射类对象的"键-值对"个数
举个简单的例子:
dic = {1: 'a', 2: 'b', 3: 'c'}
len(dic)
>>>
3
返回字典的"键-值对"个数。

返回自定义对象的"魔法"方法__len__()的返回值
我们知道,Python是完全面向对象的,比较其它编程语言,有一个很有意思的功能,就是类的"魔法方法"(类似__XXX__这样的)。
使用len()函数对不同的类容器计算项目数,本质上来讲就是调用了__len__()方法。
对于自定义的类,我们可以重写__len__()方法,让其实现特有的功能,当使用len()函数时,会执行相应的方法,以达到"偷梁换柱"的目的。
我们自定义一个类,重写__len__()方法,使用len()函数测试,结果如下:


类似int、str、list、tuple、dict这样的内置类型,在使用len()函数计算实例长度时,其实就是调用了类定义里面的__len__()方法。

重写__len__()方法可以扩展类的功能,在调用len()函数时,就会执行重写的内容。


学习时间:

学习时间为不运动的时候,作者咕咕了是去运动(无氧运动和有氧运动都做最好)了,请饶恕。


学习产出:

画工

python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、递归练习 http://t.csdnimg.cn/5NUWo
python---3--sort、lambdalen(list1)、sorted_numbers = sorted(numbers)、list.sort()

http://t.csdnimg.cn/WpVQK
python--2作业66,69,71,84;85;数据类型:int()float()TrueFalsestr()list()set()dict()tuple()class

http://t.csdnimg.cn/R005I
python--1作业,注释、输入输出、运算符、运算结果、三目运算符、关系表达、多值交换、偶数、随机数、三目运算、if、elif、else、while、for、break、contince、passhttp://t.csdnimg.cn/0KDeU


计算机网络第1章:计算机网络的概念、组成与功能;计算机网络的分类、标准化工作及相关组织

http://t.csdnimg.cn/uZOAM
计算机网络第一章:性能指标:带宽、时延、时延带宽积、RTT、吞吐量、速率、信道利用率

http://t.csdnimg.cn/avNeb
计算机网络体系结构------PDU、SDU、PCI、协议、访问、接口、SAP

http://t.csdnimg.cn/x3Uar
计算机网络分层结构------OSI/ISO、TCP/IP http://t.csdnimg.cn/hLrqY
1章选择 http://t.csdnimg.cn/cnmdJ
2章选择、解答 http://t.csdnimg.cn/ONrER
通信基本概念:数据、信号、码元、信源、信道、信宿、速率、波特、带宽http://t.csdnimg.cn/TKnyM
数据、信号、码元、信源、信道、信宿、速率、波特、带宽-通信基本概念

http://t.csdnimg.cn/Kc2e3
HCIA------30奈奎斯特定理、香农定理 http://t.csdnimg.cn/Yqtch
HCIA------20应用层:C/S、P2P、peer http://t.csdnimg.cn/4i4Og
HCIA------21C/S、P2P、peer的选择

http://t.csdnimg.cn/4a11f
DNS层次域名空间、域名服务器、域名解析的原理 http://t.csdnimg.cn/yeWd6
HCIA------23DNS层次域名空间、域名服务器、域名解析的原理的选择、解答 http://t.csdnimg.cn/RXPNV
HCIA------24FTP 的工作原理、功能、TFTP、控制连接、数据连接

http://t.csdnimg.cn/9TPlw
HCIA------25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答

http://t.csdnimg.cn/8GkAU
HCIA------26E-mall、MIME、POP3、IMAP、电子邮件系统的组成结构、电子邮件的发送,接收过程、MIME 与SMTP 的关系http://t.csdnimg.cn/smTaR
HCIA------27E-mall、MIME;POP3、IMAP的选择,解答 http://t.csdnimg.cn/xnsXP
HCIIA------28HTTP、万维网、HTML;万维网的工作过程;HTTP 的特点------无连接-TCP、无状态-Cookie、非持久连接-非流水线和流水线;HTTP 的报文结构http://t.csdnimg.cn/cRcxY

  • 技术笔记 1遍
  • 有错误请指出,作者会及时改正
相关推荐
confiself9 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
小码的头发丝、16 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
XiaoLeisj20 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man24 分钟前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*25 分钟前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家25 分钟前
go语言中package详解
开发语言·golang·xcode
llllinuuu26 分钟前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s27 分钟前
Golang--协程和管道
开发语言·后端·golang
王大锤439129 分钟前
golang通用后台管理系统07(后台与若依前端对接)
开发语言·前端·golang
为什么这亚子29 分钟前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算