2017 © Pedro Peláez
 

library itertools

A collection of functions that mirror the Python itertools library

image

zicht/itertools

A collection of functions that mirror the Python itertools library

  • Monday, July 2, 2018
  • by muhammedeminakbulut
  • Repository
  • 8 Watchers
  • 7 Stars
  • 554 Installations
  • PHP
  • 4 Dependents
  • 0 Suggesters
  • 1 Forks
  • 3 Open issues
  • 91 Versions
  • 168 % Grown

The README.md

Build Status Scrutinizer Code Quality Code Coverage, (*1)

Zicht Iterator Tools Library

The Iterator Tools, or itertools for short, are a collection of convenience tools to handle sequences of data such as arrays, iterators, and strings. Some of the naming and API is based on the Python itertools., (*2)

Examples, (*3)

Common operations include: - mapping: map and mapBy - filtering: filter, difference - sorting: sorted - grouping: groupBy - reducing: accumulate, collapse, and reduce, (*4)

Usage

In order to use the available itertools filters/functions via Twig, simply add this service definition in your config/services.yaml, (*5)

Zicht\Itertools\twig\Extension:
  tags: ['twig.extension']

Scripts

  • unit test: composer test
  • lint test: composer lint

Example data

The examples below will use the following data to illustrate how various Iterator tools work:, (*6)

$words = ['Useful', 'Goonies', 'oven', 'Bland', 'notorious'];
$numbers = [1, 3, 2, 5, 4];
$vehicles = [
    [
        'id' => 1,
        'type' => 'car', 
        'wheels' => 4, 
        'colors' => ['red', 'green', 'blue'], 
        'is_cool' => false, 
        'price' => 20000,
    ],
    [
        'id' => 2,
        'type' => 'bike', 
        'wheels' => 2, 
        'colors' => ['red', 'green', 'blue'], 
        'is_cool' => false, 
        'price' => 600,
    ],
    [
        'id' => 5,
        'type' => 'unicicle', 
        'wheels' => 1, 
        'colors' => ['red'], 
        'is_cool' => true, 
        'price' => 150,
    ],
    [
        'id' => 9,
        'type' => 'car', 
        'wheels' => 8, 
        'colors' => ['blue'], 
        'is_cool' => true, 
        'price' => 100000,
    ],
];

Examples

With the example data above, this is how you could use itertools to get all unique colors of the cars in alphabetical order:, (*7)

use Zicht\Itertools\util\Filters;
use function Zicht\Itertools\iterable;

$vehicles = iterable($vehicles)
    ->filter(Filters::equals('car', 'type')) // {[vehicle...], [vehicle...]}
    ->map('colors') // {0: ['red', 'green', 'blue'], 1: ['blue']}
    ->collapse() // {0: 'red', 1: 'green', 2: 'blue', 3: 'blue'}
    ->unique() // {0: 'red', 1: 'green', 2: 'blue'}
    ->sorted(); // {2: 'blue', 1: 'green', 0: 'red'}

You can achieve the same in Twig:, (*8)

{% for vehicle_color in vehicles
    |it.filter(it.filters.equals('car', 'type'))
    |it.map('colors')
    |it.collapse
    |it.unique
    |it.sorted
%}
    {{ vehicle_color }}
{% endfor %}

Getter strategy

Many itertools can be passed a $strategy parameter. This parameter is used to obtain a value from the elements in the collection. The $strategy can be one of three things:, (*9)

  1. null, in which case the element itself is returned. For example:, (*10)

    use function Zicht\Itertools\iterable;
    
    $result = iterable($words)->map(null);
    var_dump($result);
    // {0: 'Useful', 1: 'Goonies', 2: 'oven', 3: 'Bland', 4: 'notorious'}
    

    Or in Twig:, (*11)

    {{ dump(word|it.map) }}
    
  2. a closure, in which case the closure is called with the element value and key as parameters to be used to compute a return value. For example:, (*12)

    use function Zicht\Itertools\iterable;
    
    $getDouble = fn($value, $key) => 2 * $value;
    $result = iterable($numbers)->map($getDouble);
    var_dump($result);
    // {0: 2, 1: 6, 2: 4, 3: 10, 4: 8}
    

    Or in Twig:, (*13)

    {{ dump(numbers|it.map(num => 2 * num)) }}
    
  3. a string, in which case this string is used to create a closure that tries to find public properties, methods, or array indexes. For example:, (*14)

    use function Zicht\Itertools\iterable;
    
    $result = iterable($vehicles)->map('type');
    var_dump($result);
    // {0: 'car', 1: 'bike', 2: 'unicicle', 3: 'car'}
    

    Or in Twig:, (*15)

    {{ dump(word|it.map) }}
    

    The string can consist of multiple dot separated words, allowing access to nested properties, methods, and array indexes., (*16)

    If one of the words in the string can not be resolved into an existing property, method, or array index, the value null will be returned. For example:, (*17)

    use function Zicht\Itertools\iterable;
    
    $result = iterable($vehicles)->map('colors.2');
    var_dump($result);
    // {0: 'blue', 1: 'blue', 2: null, 3: null}
    

    Or in Twig:, (*18)

    {{ dump(vehicles|it.map('colors.2')) }}
    

Fluent interface

One way to use the Iterator Tools is to convert the array, Iterator, string, etc into an IterableIterator. This class provides a fluent interface to all of the common operations. For example:, (*19)

use function Zicht\Itertools\iterable;

$result = iterable($vehicles)->filter('is_cool')->mapBy('id')->map('type');
var_dump($result);
// {5: 'unicicle', 9: 'car'}

Or in Twig:, (*20)

{{ dump(vehicles|it.filter('is_cool').mapBy('id').map('type')) }}

Mapping

Mapping converts one collection into another collection of equal length. Using map allows manipulation of the elements while mapBy allows manipulation of the collection keys., (*21)

For example, we can use a closure to create a title for each element in $vehicles:, (*22)

use function Zicht\Itertools\iterable;

$getTitle = fn($value, $key) => sprintf('%s with %s wheels', $value['type'], $value['wheels']);
$titles = iterable($vehicles)->map($getTitle);
var_dump($titles);
// {0: 'car with 4 wheels', ..., 3: 'car with 8 wheels'}

Using the string getter strategy we can easily get the types for each element in $vehicles mapped by the vehicle identifiers. For example:, (*23)

use function Zicht\Itertools\iterable;

$types = iterable($vehicles)->mapBy('id')->map('type');
var_dump($types);
// {1: 'car', 2: 'bike', 5: 'unicicle', 9: 'car'}

Or in Twig:, (*24)

{{ dump(vehicles|it.mapBy('id').map('type')) }}

There are several common mapping closures available in mappings.php. Calling these functions returns a closure that can be passed to map and mapBy. For example:, (*25)

use Zicht\Itertools\util\Mappings;
use function Zicht\Itertools\iterable;

$lengths = iterable($words)->map(Mappings::length());
var_dump($lengths);
// {0: 6, 1: 3, 2: 4, 3: 5, 4: 9}

Or in Twig:, (*26)

{{ dump(words|it.map(it.mappings.length)) }}

Filtering

Filtering converts one collection into another, possibly shorter, collection. Using filter each element in the collection is evaluated, the elements that are considered empty will be rejected, while the elements that are not empty will be allowd to pass through the filter., (*27)

For example, we can use a closure to determine if an element is expensive, the filter will then only allow the expensive elements through:, (*28)

use function Zicht\Itertools\iterable;

$isExpensive = fn($value, $key) => $value['price'] >= 10000;
$expensiveTypes = iterable($vehicles)->filter($isExpensive)->map('type');
var_dump($expensiveTypes);
// {1: 'car', 9: 'car'}

Or in Twig:, (*29)

{{ dump(vehicles|it.filter(vehicle => vehicle.price >= 10000).map('type')) }}

Using the string getter strategy we can get only the $vehicles that are considered to be cool. For example:, (*30)

use function Zicht\Itertools\iterable;

$coolVehicleTypes = iterable($vehicles)->filter('is_cool')->map('type');
var_dump($coolVehicleTypes);
// {5: 'unicicle', 9: 'car'}

Or in Twig:, (*31)

{{ dump(vehicles|it.filter('is_cool').map('type')) }}

There are several common filter closures available in filters.php. Calling these function returns a closure that can be passed to filter. For example:, (*32)

use Zicht\Itertools\util\Filters;
use function Zicht\Itertools\iterable;

$movieWords = iterable($words)->filter(Filters::in(['Shining', 'My little pony', 'Goonies']));
var_dump($movieWords);
// {1: 'Goonies'}

Or in Twig:, (*33)

{{ dump(words|it.filter(it.filters.in(['Shining', "My little pony', 'Goonies'])) }}

Sorting

sorted converts one collection into another collection of equal size but with the elements possibly reordered., (*34)

For example, using the null getter strategy, which is the default, we will sort using the element values in ascending order:, (*35)

use function Zicht\Itertools\iterable;

$ordered = iterable($numbers)->sorted();
var_dump($ordered);
// {0: 1, 2: 2, 1: 3, 4: 4, 3: 5}

Or in Twig:, (*36)

{{ dump(numbers|it.sorted }}

The sorting algorithm will preserve the keys and is guaranteed to be stable. I.e. when elements are sorted using the same value, then the sorted order is guaranteed to be the same as the order of the input elements. This is contrary to the standard PHP sorting functions., (*37)

Using the closure getter strategy the returned value is used to determine the order. The closure is called exactly once per element, and the resulting values must be comparable. For example:, (*38)

use function Zicht\Itertools\iterable;

$getLower = fn($value, $key) => strtolower($value);
$ordered = iterable($words)->sorted($getLower);
var_dump($ordered);
// {3: 'Bland', 1: 'Goonies', 2: 'oven', 0: 'Useful', 4: 'notorious'};

The mappings.php provides a mapping closure which returns a random number. This can be used to sort a collection in a random order. For example:, (*39)

use Zicht\Itertools\util\Mappings;
use function Zicht\Itertools\iterable;

$randomized = iterable($words)->sorted(Mappings::random());
var_dump($randomized);
// {... randomly ordere words ...}

Or in Twig:, (*40)

{{ dump(words|it.sorted(it.mappings.random)) }}

Grouping

groupBy converts one collection into one or more collections that group the elements together on a specific criteria., (*41)

For example, using the string getter strategy we can group all the $vehicles of the same type together:, (*42)

use function Zicht\Itertools\iterable;

$vehiclesByType = iterable($vehicles)->groupBy('type');
var_dump($vehiclesByType);
// {'bike': {1: [...]}, 'car': {0: [...], 3: [...]} 'unicicle': {2: [...]}}

Or in Twig:, (*43)

{{ dump(vehicles|it.groupBy('type')) }}

Not that the original keys of the vehicles are still part of the resulting groups, and the elements within each group keep the order that they had in the input, i.e. it uses the stable sorting provided by sorted., (*44)

Reducing

reduce converts a collection into a single value by calling a closure of two arguments cumulatively to the elements in the collection, from left to right., (*45)

For example, without any arguments reduce will add all elements of the collection together:, (*46)

use function Zicht\Itertools\iterable;

$sum = iterable($numbers)->reduce();
var_dump($sum);
// 15

Or in Twig:, (*47)

{{ dump(numbers|it.reduce) }}

In the above example, the default closure that is used looks like this:, (*48)

public static function add($a, $b): \Closure
{
    return $a + $b;
}

Given that $numbers consists of the elements {1, 3, 2, 5, 4}, the add closure is called four times:, (*49)

$sum = Reductions::add(Reductions::add(Reductions::add(Reductions::add((1, 3), 2), 5), 4));
var_dump($sum);
// 15

There are several common reduction closures available in reductions.php. Calling these functions returns a closure that can be passed to reduction. For example:, (*50)

use Zicht\Itertools\util\Reductions;
use function Zicht\Itertools\iterable;

$scentence = iterable($words)->reduce(Reductions::join(' - '));
var_dump($scentence);
// 'Useful - Goonies - oven - Bland - notorious'

Or in Twig:, (*51)

{{ dump(words|it.reduce(it.reductions.join(' - ')) }}

Another common reduction is chaining multiple lists together into one list. We call this process collapse. This process can also be achieved using reduce and chain together, however, because it is used frequently the collapse helper makes its usage easier, for example:, (*52)

use function Zicht\Itertools\iterable;

$flat = iterable([['one', 'two'], ['three']])->collapse();
var_dump($flat);
// {0: 'one', 1: 'two', 0: 'three'}

Or in Twig:, (*53)

{% set data = [['one', 'two'], ['three']] %}
{{ dump(data|it.collapse) }}

Maintainer(s)

The Versions

02/07 2018

dev-master

9999999-dev

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

02/07 2018

2.10.10

2.10.10.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

14/06 2018

2.10.9

2.10.9.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

14/12 2017

2.10.8

2.10.8.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

09/11 2017

2.10.7

2.10.7.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

31/08 2017

2.10.6

2.10.6.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

04/08 2017

2.10.5

2.10.5.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

31/07 2017

2.10.4

2.10.4.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

30/06 2017

2.10.3

2.10.3.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

22/06 2017

2.10.2

2.10.2.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

21/06 2017

2.10.1

2.10.1.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

01/06 2017

2.10.0

2.10.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

01/06 2017

2.10.0-rc.3

2.10.0.0-RC3

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

09/05 2017

2.10.0-rc.2

2.10.0.0-RC2

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

01/05 2017

2.10.0-rc.1

2.10.0.0-RC1

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

04/04 2017

2.9.0

2.9.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

17/03 2017

dev-feature/add-interfaces

dev-feature/add-interfaces

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

27/02 2017

2.8.26

2.8.26.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

16/02 2017

dev-feature/use-symfony-property-access

dev-feature/use-symfony-property-access

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Requires

 

The Development Requires

by Zicht online

16/02 2017

2.8.25

2.8.25.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

11/01 2017

2.8.24

2.8.24.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

20/12 2016

2.8.23

2.8.23.0

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

19/12 2016

2.8.22-rc.1

2.8.22.0-RC1

A collection of functions that mirror the Python itertools library

  Sources   Download

MIT

The Development Requires

by Zicht online

24/11 2016

2.8.21

2.8.21.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

24/11 2016

2.8.20

2.8.20.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

16/11 2016

2.8.19

2.8.19.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

09/11 2016

2.8.18

2.8.18.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

02/11 2016

2.8.17

2.8.17.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

03/10 2016

2.8.16

2.8.16.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

26/09 2016

2.8.15

2.8.15.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

05/09 2016

2.8.14

2.8.14.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

01/09 2016

2.8.13

2.8.13.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

01/09 2016

2.8.12

2.8.12.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

31/08 2016

2.8.11

2.8.11.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

29/08 2016

2.8.10

2.8.10.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

29/08 2016

2.8.9

2.8.9.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

23/08 2016

2.8.8

2.8.8.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

23/08 2016

2.8.7

2.8.7.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

19/08 2016

2.8.6

2.8.6.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

11/08 2016

2.8.5

2.8.5.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

08/08 2016

2.8.4

2.8.4.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

04/08 2016

2.8.3

2.8.3.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

01/08 2016

2.8.2

2.8.2.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

30/06 2016

2.8.1

2.8.1.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

30/06 2016

2.8.0

2.8.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

29/06 2016

2.7.1

2.7.1.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

28/06 2016

2.7.0

2.7.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

23/06 2016

2.6.0

2.6.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

23/06 2016

2.5.3

2.5.3.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

22/06 2016

2.5.2

2.5.2.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

15/06 2016

2.5.1

2.5.1.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

15/06 2016

2.5.0

2.5.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

31/05 2016

2.4.0

2.4.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

20/05 2016

2.3.1

2.3.1.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

13/05 2016

2.3.1-rc.5

2.3.1.0-RC5

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

13/05 2016

2.3.1-rc.4

2.3.1.0-RC4

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

13/05 2016

2.3.1-rc.3

2.3.1.0-RC3

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

13/05 2016

2.3.1-rc.2

2.3.1.0-RC2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

12/05 2016

2.3.1-rc.1

2.3.1.0-RC1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

11/05 2016

2.3.0

2.3.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

21/04 2016

2.3.0-beta.3

2.3.0.0-beta3

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

15/04 2016

2.3.0-beta.2

2.3.0.0-beta2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

05/04 2016

2.3.0-beta.1

2.3.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

01/04 2016

2.2.0-beta.1

2.2.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

23/03 2016

2.1.0-beta.3

2.1.0.0-beta3

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

21/03 2016

2.1.0-beta.2

2.1.0.0-beta2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

14/03 2016

2.1.0-beta.1

2.1.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

07/03 2016

2.0.0-beta.2

2.0.0.0-beta2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

07/03 2016

2.0.0-beta.1

2.0.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

10/02 2016

1.5.0

1.5.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

10/12 2015

1.5.0-beta.5

1.5.0.0-beta5

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

03/12 2015

1.5.0-beta.4

1.5.0.0-beta4

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

12/11 2015

1.5.0-beta.3

1.5.0.0-beta3

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

12/11 2015

1.5.0-beta.2

1.5.0.0-beta2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

04/11 2015

1.5.0-beta.1

1.5.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

03/11 2015

1.4.3

1.4.3.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

03/11 2015

1.4.2

1.4.2.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

30/10 2015

1.4.1

1.4.1.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

30/10 2015

1.4.0

1.4.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

19/10 2015

1.4.1-rc.2

1.4.1.0-RC2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

05/10 2015

1.4.1-rc.1

1.4.1.0-RC1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

22/09 2015

1.4.0-rc.2

1.4.0.0-RC2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

10/09 2015

1.4.0-rc.1

1.4.0.0-RC1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

28/08 2015

1.3.0

1.3.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

28/08 2015

1.2.0

1.2.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

25/08 2015

1.2.0-beta.1

1.2.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

04/08 2015

1.1.0

1.1.0.0

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

30/07 2015

1.1.0-beta.1

1.1.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

29/07 2015

1.0.0-beta.1

1.0.0.0-beta1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

22/07 2015

1.0.0-alpha.2

1.0.0.0-alpha2

A collection of functions that mirror the Python itertools library

  Sources   Download

The Development Requires

by Zicht online

22/07 2015

1.0.0-alpha.1

1.0.0.0-alpha1

A collection of functions that mirror the Python itertools library

  Sources   Download

The Requires

 

by Boudewijn Schoon