Heim >Backend-Entwicklung >Python-Tutorial >Fehler beim Aktualisieren der Liste während der Schleife in Python

Fehler beim Aktualisieren der Liste während der Schleife in Python

WBOY
WBOYnach vorne
2024-02-22 13:07:03843Durchsuche

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

Frageninhalt

Warum wird die Liste „Spans“ nie aktualisiert? Ich verstehe nicht, warum der Code in einer Endlosschleife hängen bleibt.

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

Beispiel „Blockieren“: 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)

Was ich erwarte, ist, dass print(spans) „[]“ ausgibt. Der Code erreicht diesen Punkt jedoch nie.


Richtige Antwort


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

wird nicht übersprungen span["font"] == "sb&cusilcharis-bold" 的第一个匹配项。所以 entry_last_position == entry_first_position, nichts wird gelöscht und man steckt in einer Endlosschleife fest. Ändern Sie es in

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

Also beginnt die Suche nach der nächsten Position in der Liste

Das obige ist der detaillierte Inhalt vonFehler beim Aktualisieren der Liste während der Schleife in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:C-Programme und UnterprozesseNächster Artikel:C-Programme und Unterprozesse