Tenhle kód slouží ke sloučení dvou samostatně získaných seznamů výsledků („autorská jména“ a „slova týkající se studií“) do jednoho seznamu pro každou zprávu. Podívejme se krok po kroku:
combined = []
for authors_list, studies_list in zip(raw_authors, raw_studies):
combined.append(authors_list + studies_list)
-
raw_authors
araw_studies
jsou oba seznamy, kde každá položka odpovídá jedné zprávě:-
raw_authors[i]
je seznam autorů, které jsme našli v i‑té zprávě. -
raw_studies[i]
jsou klíčová slova „studie/analýza“ z téže i‑té zprávy.
-
-
zip(raw_authors, raw_studies)
:-
zip
vezme dva (nebo více) seznamy a vrátí iterátor, který postupně dává dvojice prvků z každého seznamu se stejným indexem. -
První iterace: vezme
raw_authors[0]
araw_studies[0]
-
Druhá iterace: vezme
raw_authors[1]
araw_studies[1]
-
A tak dále, až do konce kratšího z těch dvou původních seznamů.
-
-
for authors_list, studies_list in zip(...)
:-
V každém kroku smyčky se
authors_list
rovná seznamu autorů z jedné zprávy astudies_list
seznamu studií z té samé zprávy.
-
-
authors_list + studies_list
:-
V Pythonu se dva seznamy dájí sloučit operátorem
+
. Výsledkem je nový seznam, který obsahuje všechny položky zauthors_list
, a za ně všechny položky zstudies_list
.
-
-
combined.append(...)
:-
Tento sloučený seznam (autoři i studie v jedné zprávě) se přidá jako další položka do seznamu
combined
.
-
Výsledek
-
combined
je seznam seznamů:combined = [ ['Joshua Harris', 'Leslie Ludy', 'Studie'], ['John Alexander Dowie', 'Analýza'], ['Frank Sandford', 'Studie', 'Metaanalýza'], ... ]
Každý vnitřní seznam obsahuje nejprve jména autorů a potom klíčová slova studií z jedné zprávy.
-
Tyto sloučené položky pak můžeš naformátovat (
format_message_results
) a deduplikovat (deduplicate
), aby ses v exportu vždy dozvěděl, kteří autoři a studie se v dané zprávě vyskytly.
Proč se to nemůže zapsat takto
for authors_list, studies_list in (raw_authors, raw_studies)?
Výborná otázka! 🔍
Krátká odpověď:
for authors_list, studies_list in (raw_authors, raw_studies)
nejde použít, protože (raw_authors, raw_studies)
je dvojice (tuple) dvou seznamů, ne dvojice položek.
📌 Co se opravdu děje ve dvou případech:
❌ Špatná verze:
for authors_list, studies_list in (raw_authors, raw_studies):
-
(raw_authors, raw_studies)
je n-tice dvou seznamů – tedy:([...], [...]) # tuple
-
Cyklus se pokusí iterovat přes tu n-tici, která má jen dvě položky:
-
První průchod:
authors_list = raw_authors
, alestudies_list = ???
– chybí! -
Dojde k chybě:
ValueError: not enough values to unpack (expected 2, got 1)
-
✅ Správná verze:
for authors_list, studies_list in zip(raw_authors, raw_studies):
-
zip(raw_authors, raw_studies)
vytvoří iterátor dvojic:[ (raw_authors[0], raw_studies[0]), (raw_authors[1], raw_studies[1]), ... ]
-
Tohle je přesně to, co
for authors_list, studies_list in ...
očekává – dvojice na každém řádku smyčky.
🔎 Shrnutí:
Konstrukce | Co to znamená | Funkční? |
---|---|---|
(raw_authors, raw_studies) |
Tuple dvou seznamů | ❌ Ne |
zip(raw_authors, raw_studies) |
Iterátor dvojic (každá dvojice odpovídá indexu) | ✅ Ano |
Chceš-li, mohu ti to ukázat na mini příkladu s výpisem.
Žádné komentáře:
Okomentovat