我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在 Python 中循环时更新列表时出错

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在 Python 中循环时更新列表时出错

问题内容

为什么列表“spans”从未更新?我不明白为什么代码会陷入无限循环。

pdf:https://www.sil.org/system/files/reapdata/62/99/18/62991811720566250411942290005522370655/40337_02.pdf

“块”示例:https://jumpshare.com/s/y393jobqjfiye51gkexn

import fitz

doc = fitz.open("cubeo/40337_02.pdf")
page = doc[3]

blocks = page.get_text("dict", flags = fitz.TEXTFLAGS_TEXT)["blocks"]
for block in blocks: 
    entries = []
    if len(block["lines"]) > 3: # ignora legendas e número de página
        for line in block["lines"]: 
            spans = []
            for span in line["spans"]:
                spans.append({"text": span["text"].replace("�", " "), "size": int(span["size"]), "font": span["font"]})

            # While there are spans left
            while True:
                # Delimits where an entry starts
                entry_first_position = None
                for i, span in enumerate(spans):
                    if span["font"] == "Sb&cuSILCharis-Bold":
                        entry_first_position = i
                        break
                if entry_first_position is not None:
                    # Delimits where an entry ends
                    entry_last_position = None
                    for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):
                        if span["font"] == "Sb&cuSILCharis-Bold":
                            entry_last_position = i
                            break
                    if entry_last_position is not None:
                        # Whole entry is added as a list
                        append_list = spans[entry_first_position:entry_last_position]
                        entries.append(append_list)
                        spans = spans[:entry_first_position] + spans[entry_last_position:]
                    else:
                        break
                else:
                    break
             print(spans)

我期望的是 print(spans) 输出“[]”。然而,代码永远不会达到这一点。


正确答案


for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):

不会跳过 span["font"] == "sb&cusilcharis-bold" 的第一个匹配项。所以 entry_last_position == entry_first_position ,没有任何内容被删除,并且您陷入了无限循环。将其更改为

for i, span in enumerate(spans[entry_first_position+1:], start=entry_first_position+1):

因此它从列表中的下一个位置开始查找

以上就是在 Python 中循环时更新列表时出错的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在 Python 中循环时更新列表时出错

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在 Python 中循环时更新列表时出错

问题内容为什么列表“spans”从未更新?我不明白为什么代码会陷入无限循环。pdf:https://www.sil.org/system/files/reapdata/62/99/18/6299181172056625041194229
在 Python 中循环时更新列表时出错
2024-02-22

在 Python 中迭代列表时从列表中删除项目时出现奇怪的结果

问题内容我有这段代码:numbers = list(range(1, 50))for i in numbers:if i 但是,我得到的结果是:[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22,
在 Python 中迭代列表时从列表中删除项目时出现奇怪的结果
2024-02-09

在java 中使用序列化时出现NotSerializableException报错如何解决

今天就跟大家聊聊有关在java 中使用序列化时出现NotSerializableException报错如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 中序列化NotS
2023-05-31

在 Pygame 中使用自定义属性更新矩形时出现问题

问题内容我正在调试我的一个程序,我试图将自定义变量分配给矩形以更新其位置。这是我的代码:import os ; os.environ['PYGAME_HIDE_SUPPORT_PROMPT']='False'import pygam
在 Pygame 中使用自定义属性更新矩形时出现问题
2024-02-09

在python中写入文件时出现错误如何解决

在python中写入文件时出现错误如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数
2023-06-14

在嵌套文件夹 python 中添加代码时 Heroku 出错

问题内容我有一个基本的 heroku 应用程序,如果我的主应用程序文件中不包含 from src.rtctokenbuilder2 import rtctokenbuilder, role_publisher, time ,该应用程序运行
在嵌套文件夹 python 中添加代码时 Heroku 出错
2024-02-06

在网页上的选择器中显示选项时出现问题:循环 {{ range }} 的数据未在 Go 模板中传递

在网页开发过程中,有时会遇到一些问题,比如在使用选择器时出现了一些显示选项的问题。其中一个常见问题是循环数据未在Go模板中传递。这个问题可能会导致选择器无法正确显示选项。为了解决这个问题,我们需要对Go模板中的数据传递进行检查和调整。在本文
在网页上的选择器中显示选项时出现问题:循环 {{ range }} 的数据未在 Go 模板中传递
2024-02-08

python 中的 cupy 库中的 amax 和 max 函数在使用只有一列或只有一行的矩阵时是否会出错?

问题内容我尝试使用 cupy 进行 gpu 加速来实现用于机器学习和图像分类的 softmax 激活函数。我观察到,对于形状为 nx1 或 1xn 的数组,cupys max 函数会输出错误。然而,对于 nxa 的所有其他情况(其中 n
python 中的 cupy 库中的 amax 和 max 函数在使用只有一列或只有一行的矩阵时是否会出错?
2024-02-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录