Skip to main content

Implements an eager iterator class reminiscent of Elixir's Enum structure.

Project description

IterFun

About

IterFun implements an eager iterator class reminiscent of Elixir's Enum structure that features a series of handy methods for performing common data transformations.

It's a continuously evolving project specifically developed to meet my personal needs, but I have decided to put it out in the open in case someone else find it as useful as me. Contributions in form of pull requests or suggestions are always welcome. If you need a more mature library for your project, consider one of these alternatives instead:


Examples

Two Sum Problem

Given an array of integers domain and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order.

from iterfun import Iter

target = 12
domain = [45, 26, 5, 41, 58, 97, 82, 9, 79, 22, 3, 74, 70, 84, 17, 79, 41, 96, 13, 89]

pair = Iter(domain) \
    .filter(lambda x: x < target) \
    .combinations(2) \
    .filter(lambda x: sum(x) == target) \
    .flatten() \
    .to_list()

# [7, 10]
print(Iter(domain).find_index(lambda x: x in pair).image)

Technical Limitations

For reasons of simplicity, the mutable state in image is exposed as a list or dictionary and not as a generator which is capable of dealing with very large sequences. It's an implementation detail that is necessary for some index-based methods, though this behavior might change in future versions of this library where applicable.

There is probably room to improve the overall performance and accuracy of this library. To this end, future updates will also increase the test coverage in order to consider more edge cases and method interoperability. Notice that the terms and conditions of the MIT License will always apply.

Method Reference

This method reference serves as a first point of contact to help you discover what this library is capable of. Documentation and small, self-contained examples are provided in the doc strings of each method that you can read in the privacy of your code editor of choice.

Functions

  • invert
  • is_even
  • is_odd
  • is_prime
  • miller_rabin
  • sign

Iter

  • all
  • any
  • at
  • avg
  • cartesian
  • chunk_by
  • chunk_every
  • chunk_while
  • combinations
  • combinations_with_replacement
  • count
  • count_until
  • dedup
  • dedup_by
  • difference
  • drop
  • drop_every
  • drop_while
  • duplicates
  • filter
  • find
  • find_index
  • find_value
  • flat_map
  • flat_map
  • flat_map_reduce
  • flatten
  • frequencies
  • group_by
  • intersects
  • intersperse
  • into
  • is_disjoint
  • is_empty
  • is_member
  • is_subset
  • is_superset
  • join
  • linspace
  • map
  • map_every
  • map_intersperse
  • map_join
  • map_reduce
  • max
  • min
  • min_max
  • open
  • permutations
  • product
  • randint
  • random
  • range
  • reduce
  • reduce_while
  • reject
  • reverse
  • reverse_slice
  • save
  • scan
  • shorten
  • shuffle
  • slice
  • slide
  • sort
  • split
  • split_while
  • split_with
  • sum
  • symmetric_difference
  • take
  • take_every
  • take_random
  • take_while
  • to_dict
  • to_list
  • transpose
  • union
  • unique
  • unzip
  • with_index
  • zip_reduce
  • zip_with

Authors

Name Mail Address GitHub Profile
Stefan Greve greve.stefan@outlook.jp StefanGreve

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License - see the LICENSE file for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iterfun-0.0.5.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

iterfun-0.0.5-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file iterfun-0.0.5.tar.gz.

File metadata

  • Download URL: iterfun-0.0.5.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for iterfun-0.0.5.tar.gz
Algorithm Hash digest
SHA256 6e18f48596d406f090c4ee6436ae1b5e4ee493fb3c9b554b649cf7fcd7a3a114
MD5 ae21bf2e0609e93bbd426c3cbbb6cd06
BLAKE2b-256 01f40434e0b82d546aba3a1ab63113556111a0fe8abc17f73176aa1975b7d94b

See more details on using hashes here.

File details

Details for the file iterfun-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: iterfun-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 18.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for iterfun-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 afe17ac0c65d04b71b1ef36184ad7988b9aa8048a5a76a00bda7bb5404291334
MD5 50b1d9c720057dbb90cd04bc4e86b032
BLAKE2b-256 fb6cb5a1bf9d72ea64fdefbf3cb4df7f5557be2cef47ee40478b795c18ed7d99

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page