python--5--len()

本文详细介绍了Python内置函数len()的用法,包括计算字符串、列表、元组、集合、字典以及自定义对象的长度,展示了len()在不同对象类型上的应用以及注意点,如编码后的字节数计算和自定义类的__len__()方法重写。
摘要由CSDN通过智能技术生成

学习目标:

  • 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、pass                                                                                                   http://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遍
  • 有错误请指出,作者会及时改正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值