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_authorsaraw_studiesjsou 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):-
zipvezme 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_listrovná seznamu autorů z jedné zprávy astudies_listseznamu 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
-
combinedje 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