首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用itertools生成标题序号,再也不需要穷举了

今天在项目中碰到一个序号标题的需求,即为文档生成标题序号,中文标题序号倒还好,需求如下:

每个文档中对标题序列的需求都是不同的,即文档中标题的数量不固定,这个文档中的标题可能有百来个,另外文档的标题数量可能有300个,这些标题的序号需要依次生成,标题的层级也不固定,有些文档需求一级到三级标题,而有些需求一级到四级标题。

和序号倒也还好,可以穷举,顶多花点时间来写,和要是穷举的话,那就吓人了,那绝对不是人干的事。

思来想去,这事肯定得写个小算法来解决,想起了python内置库中有个强大的,内部有个方法,它大概可以实现这样的功能:

接收一个可迭代对象,实例是一个生成器对象,当然也是一个可迭代对喜爱那个,循环调用实例的方法时会依次一个实参中的元素。众所周知,一般的生成器迭代殆尽时触发异常,但不会,虽然没看源码(关键是看不懂),但我推测,内部首先构建了一个无尽生成器,当参数被迭代殆尽触发时,捕捉到之后调用无尽生成器对象,再初始化一个入参的生成器对象。

的这个特性完全满足上面的标题序列生成的需求。打算先从最简单的入手,实验代码如下:

二级标题序列的实现

标题序列最高为10,实现的需求

调用方法:

每执行一次上面的方法,就会一次返回序列,实现从的需求。入参决定了序列能达到的限度,入参为10,标题序列组高也只能到10。

三级标题序列的实现

有了的经验,要实现的需求就容易多了,无非多套一层循环,如下:

调用方法与如出一辙。

四级标题序列的实现

如法炮制,再套一层循环

虽然有点不美观,而且套了4层循环,但考虑到这已经实现了需求,那。。。就算了吧。

最后把四个实现封装起来,每个级别的标题调用对应的封装,而且生成器对象按需取,无需循环一次取出来,还能记得住四个级别标题各自取到什么序号了。

如果要求的标题序号是中文呢?那就把数字和中文序号做个映射就好了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230329A09QD800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券