Python进阶学习(4)

如何去掉字符串中多余的字符


# 使用 strip,lstrip,rstrip 去掉两端多余的空白符,不能去中间的
import re

string = '  whsan  gda  '
print(string.strip())
print(string.lstrip())
print(string.rstrip())

# 使用切片方法去掉中间的特殊字符

string = 'dhang:daxig'
print(string[:5]+string[6:])

# 使用 replace 方法来替换全部的特殊字符
string = 'dhang   dhangdi   dh '
print(string.replace(' ',''))

# 使用正则表达式来完成多个字符的替换
string = '(djaigidanb:d \t)xah'
new_string = re.sub('[\s:\t()]+','',string)
print(new_string)

可迭代对象、迭代器对象

Iterable 可迭代的;可迭代对象可以理解成能用 for 循环遍历的数据结构,例如 dict,list,str 等都是可迭代的,但是他们都不是迭代器对象。


from collections import Iterable, Iterator

lst = [1,2,3,4]
x = isinstance(lst,Iterable)
print(x)

y = isinstance(lst,Iterator)
print(y)

在这里插入图片描述

Iterator 迭代器对象,针对可迭代对象,可以通过 iter() 函数来把他们变成一个迭代器对象~,例如:下面代码中的 iter_lst 就是一个迭代器对象,也在第三行中使用 isinstance 函数来验证了,他确实是一个迭代器对象。

lst = [1,2,3,4]
iter_lst = iter(lst)
print(isinstance(iter_lst,Iterator))

在这里插入图片描述

Iterator 对象可以通过使用 next 方法来对整个迭代器中的元素进行遍历;而且这种遍历是不可逆的,一次性的,用完就没有,next() 返回最后一个迭代器元素的时候,会抛出异常StopIteration

from collections import Iterator
lst = [1,2,3,4]
iter_lst = iter(lst)
print(isinstance(iter_lst,Iterator))

while iter_lst:
    x = next(iter_lst)
    print(x,iter_lst)

在这里插入图片描述

如何构造和使用迭代器对象

其实,就像我们已知的,当我们得知一个对象是可迭代对象 Iterable,那么我们可以遍历这个对象中的每一个元素,list,dict,tuple等都是如此,他们都是可迭代的;这是因为他们的内部都有一个 __iter__ 方法这个方法可以把一个对象变成可迭代的对象
在这里插入图片描述

但是,仅仅只包含 __iter__ 方法,是不能被称为 “迭代器”的,因为迭代器的特点,是可以使用 next() 方法,而next ()方法是底层调用的是 __next__ 方法
在这里插入图片描述

所以,根据以上描述,迭代器底层一定要有 __iter__ 方法和 __next__ 方法;而可迭代对象则只需要包含 __iter__ 方法。迭代器自身也是可迭代的
如果还不明白,可以看这张关系图~
在这里插入图片描述

那么问题来了:迭代器存在的意义是什么呢?

节省存储空间!!!

想象这些场景:

  • 如果一篇文章非常的长,这个时候如果把它整体读到内存中,那么会占用很大的内存空间;迭代器可以将文本的每一行进行迭代,这样可以节省大量的内存空间
  • 再比如,现在要使用网络爬虫对数据进行爬取,如果不适用迭代器,那么爬取的结果会在最后才显示并存储,如果使用迭代器,则可以对资源进行拆分和存储,节省大量的内存空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值