Meaning
Iterates over an iterable, unpacking each element so that all items except the last are collected into a list (head) and the final item is assigned to tail. This helps avoid manual indexing when the prefix and the final element need to be processed differently, reducing off‑by‑one errors. It is used when each item in the outer sequence is itself an iterable whose last component has a distinct role, such as a filename in a path or a label in a data row.
Primary Function
Looping construct
Communicative Purpose
Separate the head (all but last) and tail (last) of each element in a sequence for concise processing.
Pattern
for *head, tail in iterable:
Core Structure
for *... , ... in ...:
Função primária
Looping construct
Propósito comunicativo
Separate the head (all but last) and tail (last) of each element in a sequence for concise processing.
Situações de gatilho
File system: split directory path into components and filename, Algorithm design: recursive list processing where the last element is a pivot, Data analysis: parse CSV rows where the last column is a label
Contextos
Python data‑processing scripts, functional‑style recursion, algorithms that need divide‑and‑conquer on sequences.
Padrão
for *head, tail in iterable:
Estrutura central
for *... , ... in ...:
Slots de substituição
head: identifier for list of all but last items; tail: identifier for last item; seq: identifier for iterable to iterate over.
Colocados típicos
- list slicing
- recursion
- extended iterable unpacking
- tuple unpacking.
Substituições comuns
- head = seq[:-1]
- tail = seq[-1] inside the loop
- or using explicit length checks.
Erros comuns
Treating head as a single value instead of a list; applying to empty sequences (raises ValueError); confusing with for head, *tail in seq.
Similar / contraste
for head, *tail in seq: (splits first vs rest); for head, tail in seq: (requires exactly two items).
Interferências
Coming from C/Java: may expect head to be the first element only; remember the star collects the rest.
Família do chunk
- for head
- *tail in seq
- for *head
- tail in seq
- extended iterable unpacking
- tuple unpacking
Nuance
If seq is empty, head becomes an empty list and tail raises ValueError because there is no last element; guard against empty iterables.
Efeito pragmático
Makes the intent to process all-but-last and last elements explicit, improving readability and reducing indexing errors.
Dica de memória
Star grabs the rest, comma separates last.
Nota
If seq is empty, tail raises a ValueError because there is no last element; head becomes an empty list. The starred variable always receives a list (possibly empty) of all but the last items. Works with any iterable, not just sequences, but tail must be the last yielded item.
Upgrade path
Use match statement (Python 3.10+): case [*head, tail]: for more declarative decomposition.
Log in to save chunks.