In computer science, zipping is a function which maps a tuple of sequences into a sequence of tuples. This name zip derives from the action of a zipper in that it interleaves two formerly disjoint sequences. The inverse function is unzip.
Given the three words cat, fish and be where |cat| is 3, |fish| is 4 and |be| is 2. Let denote the length of the longest word which is fish; . The zip of cat, fish, be is then 4 tuples of elements:
where # is a symbol not in the original alphabet. In Haskell this truncates to the shortest sequence , where :
Let Σ be an alphabet, # a symbol not in Σ.
Let x<sub>1</sub>x<sub>2</sub>... x<sub>|x|</sub>, y<sub>1</sub>y<sub>2</sub>... y<sub>|y|</sub>, z<sub>1</sub>z<sub>2</sub>... z<sub>|z|</sub>, ... be n words (i.e. finite sequences) of elements of Σ. Let denote the length of the longest word, i.e. the maximum of |x|, |y|, |z|, ... .
The zip of these words is a finite sequence of n-tuples of elements of , i.e. an element of :
where for any index , the w<sub>i</sub> is #.
The zip of x, y, z, ... is denoted zip(x, y, z, ...) or x â y â z â ...
The inverse to zip is sometimes denoted unzip.
A variation of the zip operation is defined by:
where is the minimum length of the input words. It avoids the use of an adjoined element , but destroys information about elements of the input sequences beyond .
Zip functions are often available in programming languages, often referred to as . In Lisp-dialects one can simply the desired function over the desired lists, is variadic in Lisp so it can take an arbitrary number of lists as argument. An example from Clojure:
In Common Lisp:
Languages such as Python provide a function. in conjunction with the operator unzips a list:
Haskell has a method of zipping sequences but requires a specific function for each arity ( for two sequences, for three etc.), similarly the functions and are available for unzipping:
List of languages by support of zip: