API Documentation — PyFunctional 1.3.0 documentation (original) (raw)
Streams API¶
The streams API enables you to read data into PyFunctional. The seq function imported withfrom functional import seq is actually an instance of functional.streams.Stream. Therefore, all the methods available on seq such as seq.csv are documented in the Streams class.
class functional.streams.
ParallelStream
(processes=None, partition_size=None, disable_compression=False, no_wrap=None)[source]¶
Bases: functional.streams.Stream
Parallelized version of functional.streams.Stream normally accessible as pseq
class functional.streams.
Stream
(disable_compression=False, max_repr_items=100, no_wrap=None)[source]¶
Bases: object
Represents and implements a stream which separates the responsibilities of Sequence and ExecutionEngine.
An instance of Stream is normally accessed as seq
csv
(csv_file, dialect='excel', **fmt_params)[source]¶
Reads and parses the input of a csv stream or file.
csv_file can be a filepath or an object that implements the iterator interface (defines next() or __next__() depending on python version).
seq.csv('examples/camping_purchases.csv').take(2) [['1', 'tent', '300'], ['2', 'food', '100']]
Parameters: | csv_file – path to file or iterator object dialect – dialect of csv, passed to csv.reader fmt_params – options passed to csv.reader |
---|---|
Returns: | Sequence wrapping csv file |
csv_dict_reader
(csv_file, fieldnames=None, restkey=None, restval=None, dialect='excel', **kwds)[source]¶
Reads and parses the input of a json file handler or file.
Json files are parsed differently depending on if the root is a dictionary or an array.
If the json’s root is a dictionary, these are parsed into a sequence of (Key, Value) pairs
If the json’s root is an array, these are parsed into a sequence of entries
seq.json('examples/users.json').first() [u'sarah', {u'date_created': u'08/08', u'news_email': True, u'email': u'sarah@gmail.com'}]
Parameters: | json_file – path or file containing json content |
---|---|
Returns: | Sequence wrapping jsonl file |
Reads and parses the input of a jsonl file stream or file.
Jsonl formatted files must have a single valid json value on each line which is parsed by the python json module.
seq.jsonl('examples/chat_logs.jsonl').first() {u'date': u'10/09', u'message': u'hello anyone there?', u'user': u'bob'}
Parameters: | jsonl_file – path or file containing jsonl content |
---|---|
Returns: | Sequence wrapping jsonl file |
open
(path, delimiter=None, mode='r', buffering=-1, encoding=None, errors=None, newline=None)[source]¶
Reads and parses input files as defined.
If delimiter is not None, then the file is read in bulk then split on it. If it is None (the default), then the file is parsed as sequence of lines. The rest of the options are passed directly to builtins.open with the exception that write/append file modes is not allowed.
seq.open('examples/gear_list.txt').take(1) [u'tent\n']
Parameters: | path – path to file delimiter – delimiter to split joined text on. if None, defaults to per line split mode – file open mode buffering – passed to builtins.open encoding – passed to builtins.open errors – passed to builtins.open newline – passed to builtins.open |
---|---|
Returns: | output of file depending on options wrapped in a Sequence via seq |
Alias to range function where seq.range(args) is equivalent to seq(range(args)).
seq.range(1, 8, 2) [1, 3, 5, 7]
Parameters: | args – args to range function |
---|---|
Returns: | range(args) wrapped by a sequence |
sqlite3
(conn, sql, parameters=None, *args, **kwargs)[source]¶
Reads input by querying from a sqlite database.
seq.sqlite3('examples/users.db', 'select id, name from users where id = 1;').first() [(1, 'Tom')]
Parameters: | conn – path or sqlite connection, cursor sql – SQL query string parameters – Parameters for sql query |
---|---|
Returns: | Sequence wrapping SQL cursor |
Transformations and Actions API¶
The pipeline module contains the transformations and actions API of PyFunctional
class functional.pipeline.
Sequence
(sequence, transform=None, engine=None, max_repr_items=None, no_wrap=None)[source]¶
Bases: object
Sequence is a wrapper around any type of sequence which provides access to common functional transformations and reductions in a data pipeline style
Accumulate sequence of elements using func. API mirrors itertools.accumulate
seq([1, 2, 3]).accumulate(lambda x, y: x + y) [1, 3, 6]
seq(['a', 'b', 'c']).accumulate() ['a', 'ab', 'abc']
Parameters: | func – two parameter, associative accumulate function |
---|---|
Returns: | accumulated values using func in sequence |
Aggregates the sequence by specified arguments. Its behavior varies depending on if one, two, or three arguments are passed. Assuming the type of the sequence is A:
One Argument: argument specifies a function of the type f(current: B, next: A => result: B. current represents results computed so far, and next is the next element to aggregate into current in order to return result.
Two Argument: the first argument is the seed value for the aggregation. The second argument is the same as for the one argument case.
Three Argument: the first two arguments are the same as for one and two argument calls. The additional third parameter is a function applied to the result of the aggregation before returning the value.
Parameters: | args – options for how to execute the aggregation |
---|---|
Returns: | aggregated value |
Returns True if the truth value of all items in the sequence true.
seq([True, True]).all() True
seq([True, False]).all() False
Returns: | True if all items truth value evaluates to True |
---|
Returns True if any element in the sequence has truth value True
seq([True, False]).any() True
seq([False, False]).any() False
Returns: | True if any element is True |
---|
average
(projection=None)[source]¶
Takes the average of elements in the sequence
seq([1, 2]).average() 1.5
seq([('a', 1), ('b', 2)]).average(lambda x: x[1])
Parameters: | projection – function to project on the sequence before taking the average |
---|---|
Returns: | average of elements in the sequence |
cache
(delete_lineage=False)[source]¶
Caches the result of the Sequence so far. This means that any functions applied on the pipeline before cache() are evaluated, and the result is stored in the Sequence. This is primarily used internally and is no more helpful than to_list() externally. delete_lineage allows for cache() to be used in internal initialization calls without the caller having knowledge of the internals via the lineage
Parameters: | delete_lineage – If set to True, it will cache then erase the lineage |
---|
cartesian
(*iterables, **kwargs)[source]¶
Returns the cartesian product of the passed iterables with the specified number of repetitions.
The keyword argument repeat is read from kwargs to pass to itertools.cartesian.
seq.range(2).cartesian(range(2)) [(0, 0), (0, 1), (1, 0), (1, 1)]
Parameters: | iterables – elements for cartesian product kwargs – the variable repeat is read from kwargs |
---|---|
Returns: | cartesian product |
Counts the number of elements in the sequence which satisfy the predicate func.
seq([-1, -2, 1, 2]).count(lambda x: x > 0) 2
Parameters: | func – predicate to count elements on |
---|---|
Returns: | count of elements that satisfy predicate |
Reduces a sequence of (Key, Value) by counting each key
seq([('a', 1), ('b', 2), ('b', 3), ('b', 4), ('c', 3), ('c', 0)]).count_by_key() [('a', 1), ('b', 3), ('c', 2)] :return: Sequence of tuples where value is the count of each key
Reduces a sequence of items by counting each unique item
seq(['a', 'a', 'a', 'b', 'b', 'c', 'd']).count_by_value() [('a', 3), ('b', 2), ('c', 1), ('d', 1)] :return: Sequence of tuples where value is the count of each key
Converts sequence of (Key, Value) pairs to a dictionary.
type(seq([('a', 1)]).dict()) dict
seq([('a', 1), ('b', 2)]).dict() {'a': 1, 'b': 2}
Parameters: | default – Can be a callable zero argument function. When not None, the returned dictionary is a collections.defaultdict with default as value for missing keys. If the value is not callable, then a zero argument lambda function is created returning the value and used for collections.defaultdict |
---|---|
Returns: | dictionary from sequence of (Key, Value) elements |
New sequence with unique elements present in sequence but not in other.
seq([1, 2, 3]).difference([2, 3, 4]) [1]
Parameters: | other – sequence to perform difference with |
---|---|
Returns: | difference of sequence and other |
Returns sequence of distinct elements. Elements must be hashable.
seq([1, 1, 2, 3, 3, 3, 4]).distinct() [1, 2, 3, 4]
Returns: | sequence of distinct elements |
---|
Returns sequence of elements who are distinct by the passed function. The return value of func must be hashable. When two elements are distinct by func, the first is taken.
Parameters: | func – function to use for determining distinctness |
---|---|
Returns: | elements distinct by func |
Drop the first n elements of the sequence.
seq([1, 2, 3, 4, 5]).drop(2) [3, 4, 5]
Parameters: | n – number of elements to drop |
---|---|
Returns: | sequence without first n elements |
Drops the last n elements of the sequence.
seq([1, 2, 3, 4, 5]).drop_right(2) [1, 2, 3]
Parameters: | n – number of elements to drop |
---|---|
Returns: | sequence with last n elements dropped |
Drops elements in the sequence while func evaluates to True, then returns the rest.
seq([1, 2, 3, 4, 5, 1, 2]).drop_while(lambda x: x < 3) [3, 4, 5, 1, 2]
Parameters: | func – truth returning function |
---|---|
Returns: | elements including and after func evaluates to False |
Returns True if the sequence has length zero.
seq([1]).empty() False
Returns: | True if sequence length is zero |
---|
Uses python enumerate to to zip the sequence with indexes starting at start.
seq(['a', 'b', 'c']).enumerate(start=1) [(1, 'a'), (2, 'b'), (3, 'c')]
Parameters: | start – Beginning of zip |
---|---|
Returns: | enumerated sequence starting at start |
Returns True if an element in the sequence makes func evaluate to True.
seq([1, 2, 3, 4]).exists(lambda x: x == 2) True
seq([1, 2, 3, 4]).exists(lambda x: x < 0) False
Parameters: | func – existence check function |
---|---|
Returns: | True if any element satisfies func |
Filters sequence to include only elements where func is True.
seq([-1, 1, -2, 2]).filter(lambda x: x > 0) [1, 2]
Parameters: | func – function to filter on |
---|---|
Returns: | filtered sequence |
Filters sequence to include only elements where func is False.
seq([-1, 1, -2, 2]).filter_not(lambda x: x > 0) [-1, -2]
Parameters: | func – function to filter_not on |
---|---|
Returns: | filtered sequence |
Finds the first element of the sequence that satisfies func. If no such element exists, then return None.
seq(["abc", "ab", "bc"]).find(lambda x: len(x) == 2) 'ab'
Parameters: | func – function to find with |
---|---|
Returns: | first element to satisfy func or None |
Returns the first element of the sequence.
seq([1, 2, 3]).first() 1
Raises IndexError when the sequence is empty.
seq([]).first() Traceback (most recent call last): ... IndexError: list index out of range
Parameters: | no_wrap – If set to True, the returned value will never be wrapped with Sequence |
---|---|
Returns: | first element of sequence |
Applies func to each element of the sequence, which themselves should be sequences. Then appends each element of each sequence to a final result
seq([[1, 2], [3, 4], [5, 6]]).flat_map(lambda x: x) [1, 2, 3, 4, 5, 6]
seq(["a", "bc", "def"]).flat_map(list) ['a', 'b', 'c', 'd', 'e', 'f']
seq([[1], [2], [3]]).flat_map(lambda x: x * 2) [1, 1, 2, 2, 3, 3]
Parameters: | func – function to apply to each sequence in the sequence |
---|---|
Returns: | application of func to elements followed by flattening |
Flattens a sequence of sequences to a single sequence of elements.
seq([[1, 2], [3, 4], [5, 6]]) [1, 2, 3, 4, 5, 6]
Returns: | flattened sequence |
---|
fold_left
(zero_value, func)[source]¶
Assuming that the sequence elements are of type A, folds from left to right starting with the seed value given by zero_value (of type A) using a function of type func(current: B, next: A) => B. current represents the folded value so far and next is the next element from the sequence to fold into current.
seq('a', 'b', 'c').fold_left(['start'], lambda current, next: current + [next])) ['start', 'a', 'b', 'c']
Parameters: | zero_value – zero value to reduce into func – Two parameter function as described by function docs |
---|---|
Returns: | value from folding values with func into zero_value from left to right. |
fold_right
(zero_value, func)[source]¶
Assuming that the sequence elements are of type A, folds from right to left starting with the seed value given by zero_value (of type A) using a function of type func(next: A, current: B) => B. current represents the folded value so far and next is the next element from the sequence to fold into current.
seq('a', 'b', 'c').fold_left(['start'], lambda next, current: current + [next]) ['start', 'c', 'b', a']
Parameters: | zero_value – zero value to reduce into func – Two parameter function as described by function docs |
---|---|
Returns: | value from folding values with func into zero_value from right to left |
Returns True if all elements in sequence make func evaluate to True.
seq([1, 2, 3]).for_all(lambda x: x > 0) True
seq([1, 2, -1]).for_all(lambda x: x > 0) False
Parameters: | func – function to check truth value of all elements with |
---|---|
Returns: | True if all elements make func evaluate to True |
Executes func on each element of the sequence.
l = [] seq([1, 2, 3, 4]).for_each(l.append) l [1, 2, 3, 4]
Parameters: | func – function to execute |
---|
Group elements into a list of (Key, Value) tuples where func creates the key and maps to values matching that key.
seq(["abc", "ab", "z", "f", "qw"]).group_by(len) [(1, ['z', 'f']), (2, ['ab', 'qw']), (3, ['abc'])]
Parameters: | func – group by result of this function |
---|---|
Returns: | grouped sequence |
Group sequence of (Key, Value) elements by Key.
seq([('a', 1), ('b', 2), ('b', 3), ('b', 4), ('c', 3), ('c', 0)]).group_by_key() [('a', [1]), ('c', [3, 0]), ('b', [2, 3, 4])]
Returns: | sequence grouped by key |
---|
Partitions the elements into groups of length size.
seq([1, 2, 3, 4, 5, 6, 7, 8]).grouped(2) [[1, 2], [3, 4], [5, 6], [7, 8]]
seq([1, 2, 3, 4, 5, 6, 7, 8]).grouped(3) [[1, 2, 3], [4, 5, 6], [7, 8]]
The last partition has at least one element but may have less than size elements.
Parameters: | size – size of the partitions |
---|---|
Returns: | sequence partitioned into groups of length size |
Returns the first element of the sequence.
seq([1, 2, 3]).head() 1
Raises IndexError when the sequence is empty.
seq([]).head() Traceback (most recent call last): ... IndexError: list index out of range
Parameters: | no_wrap – If set to True, the returned value will never be wrapped with Sequence |
---|---|
Returns: | first element of sequence |
head_option
(no_wrap=None)[source]¶
Returns the first element of the sequence or None, if the sequence is empty.
seq([1, 2, 3]).head_option() 1
seq([]).head_option() None
Parameters: | no_wrap – If set to True, the returned value will never be wrapped with Sequence |
---|---|
Returns: | first element of sequence or None if sequence is empty |
Returns the sequence, without its last element.
seq([1, 2, 3]).init() [1, 2]
Returns: | sequence without last element |
---|
Returns consecutive inits of the sequence.
seq([1, 2, 3]).inits() [[1, 2, 3], [1, 2], [1], []]
Returns: | consecutive init()s on sequence |
---|
Sequence and other must be composed of (Key, Value) pairs. If self.sequence contains (K, V) pairs and other contains (K, W) pairs, the return result is a sequence of (K, (V, W)) pairs. Will return only elements where the key exists in both sequences.
seq([('a', 1), ('b', 2), ('c', 3)]).inner_join([('a', 2), ('c', 5)]) [('a', (1, 2)), ('c', (3, 5))]
Parameters: | other – sequence to join with |
---|---|
Returns: | joined sequence of (K, (V, W)) pairs |
New sequence with unique elements present in sequence and other.
seq([1, 1, 2, 3]).intersection([2, 3, 4]) [2, 3]
Parameters: | other – sequence to perform intersection with |
---|---|
Returns: | intersection of sequence and other |
join
(other, join_type='inner')[source]¶
Sequence and other must be composed of (Key, Value) pairs. If self.sequence contains (K, V) pairs and other contains (K, W) pairs, the return result is a sequence of (K, (V, W)) pairs. If join_type is “left”, V values will always be present, W values may be present or None. If join_type is “right”, W values will always be present, W values may be present or None. If join_type is “outer”, V or W may be present or None, but never at the same time.
seq([('a', 1), ('b', 2), ('c', 3)]).join([('a', 2), ('c', 5)], "inner") [('a', (1, 2)), ('c', (3, 5))]
seq([('a', 1), ('b', 2), ('c', 3)]).join([('a', 2), ('c', 5)]) [('a', (1, 2)), ('c', (3, 5))]
seq([('a', 1), ('b', 2)]).join([('a', 3), ('c', 4)], "left") [('a', (1, 3)), ('b', (2, None)]
seq([('a', 1), ('b', 2)]).join([('a', 3), ('c', 4)], "right") [('a', (1, 3)), ('c', (None, 4)]
seq([('a', 1), ('b', 2)]).join([('a', 3), ('c', 4)], "outer") [('a', (1, 3)), ('b', (2, None)), ('c', (None, 4))]
Parameters: | other – sequence to join with join_type – specifies join_type, may be “left”, “right”, or “outer” |
---|---|
Returns: | side joined sequence of (K, (V, W)) pairs |
Returns the last element of the sequence.
seq([1, 2, 3]).last() 3
Raises IndexError when the sequence is empty.
seq([]).last() Traceback (most recent call last): ... IndexError: list index out of range
Parameters: | no_wrap – If set to True, the returned value will never be wrapped with Sequence |
---|---|
Returns: | last element of sequence |
last_option
(no_wrap=None)[source]¶
Returns the last element of the sequence or None, if the sequence is empty.
seq([1, 2, 3]).last_option() 3
seq([]).last_option() None
Parameters: | no_wrap – If set to True, the returned value will never be wrapped with Sequence |
---|---|
Returns: | last element of sequence or None if sequence is empty |
Sequence and other must be composed of (Key, Value) pairs. If self.sequence contains (K, V) pairs and other contains (K, W) pairs, the return result is a sequence of (K, (V, W)) pairs. V values will always be present, W values may be present or None.
seq([('a', 1), ('b', 2)]).join([('a', 3), ('c', 4)]) [('a', (1, 3)), ('b', (2, None)]
Parameters: | other – sequence to join with |
---|---|
Returns: | left joined sequence of (K, (V, W)) pairs |
Return length of sequence using its length function.
seq([1, 2, 3]).len() 3
Returns: | length of sequence |
---|
Converts sequence to list of elements.
type(seq([]).list()) list
type(seq([])) functional.pipeline.Sequence
seq([1, 2, 3]).list() [1, 2, 3]
Parameters: | n – Take n elements of sequence if not None |
---|---|
Returns: | list of elements in sequence |
make_string
(separator)[source]¶
Concatenate the elements of the sequence into a string separated by separator.
seq([1, 2, 3]).make_string("@") '1@2@3'
Parameters: | separator – string separating elements in string |
---|---|
Returns: | concatenated string separated by separator |
Maps f onto the elements of the sequence.
seq([1, 2, 3, 4]).map(lambda x: x * -1) [-1, -2, -3, -4]
Parameters: | func – function to map with |
---|---|
Returns: | sequence with func mapped onto it |
Returns the largest element in the sequence. If the sequence has multiple maximal elements, only the first one is returned.
The compared objects must have defined comparison methods. Raises TypeError when the objects are not comparable.
The sequence can not be empty. Raises ValueError when the sequence is empty.
seq([2, 4, 5, 1, 3]).max() 5
seq('aa', 'xyz', 'abcd', 'xyy').max() 'xyz'
seq([1, "a"]).max() Traceback (most recent call last): ... TypeError: unorderable types: int() < str()
seq([]).max() Traceback (most recent call last): ... ValueError: max() arg is an empty sequence
Returns: | Maximal value of sequence |
---|
Returns the largest element in the sequence. Provided function is used to generate key used to compare the elements. If the sequence has multiple maximal elements, only the first one is returned.
The sequence can not be empty. Raises ValueError when the sequence is empty.
seq([2, 4, 5, 1, 3]).max_by(lambda num: num % 4) 3
seq('aa', 'xyz', 'abcd', 'xyy').max_by(len) 'abcd'
seq([]).max_by(lambda x: x) Traceback (most recent call last): ... ValueError: max() arg is an empty sequence
Parameters: | func – function to compute max by |
---|---|
Returns: | Maximal element by func(element) |
Returns the smallest element in the sequence. If the sequence has multiple minimal elements, only the first one is returned.
The compared objects must have defined comparison methods. Raises TypeError when the objects are not comparable.
The sequence can not be empty. Raises ValueError when the sequence is empty.
seq([2, 4, 5, 1, 3]).min() 1
seq('aa', 'xyz', 'abcd', 'xyy').min() 'aa'
seq([1, "a"]).min() Traceback (most recent call last): ... TypeError: unorderable types: int() < str()
seq([]).min() Traceback (most recent call last): ... ValueError: min() arg is an empty sequence
Returns: | Minimal value of sequence |
---|
Returns the smallest element in the sequence. Provided function is used to generate key used to compare the elements. If the sequence has multiple minimal elements, only the first one is returned.
The sequence can not be empty. Raises ValueError when the sequence is empty.
seq([2, 4, 5, 1, 3]).min_by(lambda num: num % 6) 5
seq('aa', 'xyz', 'abcd', 'xyy').min_by(len) 'aa'
seq([]).min_by(lambda x: x) Traceback (most recent call last): ... ValueError: min() arg is an empty sequence
Parameters: | func – function to compute min by |
---|---|
Returns: | Maximal element by func(element) |
Returns True if the sequence does not have length zero.
seq([]).non_empty() False
seq([1]).non_empty() True
Returns: | True if sequence length is not zero |
---|
Orders the input according to func
seq([(2, 'a'), (1, 'b'), (4, 'c'), (3, 'd')]).order_by(lambda x: x[0]) [1, 2, 3, 4]
Parameters: | func – order by funciton |
---|---|
Returns: | ordered sequence |
Sequence and other must be composed of (Key, Value) pairs. If self.sequence contains (K, V) pairs and other contains (K, W) pairs, the return result is a sequence of (K, (V, W)) pairs. One of V or W will always be not None, but the other may be None
seq([('a', 1), ('b', 2)]).outer_join([('a', 3), ('c', 4)], "outer") [('a', (1, 3)), ('b', (2, None)), ('c', (None, 4))]
Parameters: | other – sequence to join with |
---|---|
Returns: | outer joined sequence of (K, (V, W)) pairs |
Partition the sequence based on satisfying the predicate func.
seq([-1, 1, -2, 2]).partition(lambda x: x < 0) ([-1, -2], [1, 2])
Parameters: | func – predicate to partition on |
---|---|
Returns: | tuple of partitioned sequences |
Executes func on each element of the sequence and returns the element
seq([1, 2, 3, 4]).peek(print).map(lambda x: x ** 2).to_list() 1 2 3 4 [1, 4, 9, 16]
Parameters: | func – function to execute |
---|
product
(projection=None)[source]¶
Takes product of elements in sequence.
seq([1, 2, 3, 4]).product() 24
seq([(1, 2), (1, 3), (1, 4)]).product(lambda x: x[0]) 1
Parameters: | projection – function to project on the sequence before taking the product |
---|---|
Returns: | product of elements in sequence |
reduce
(func, *initial)[source]¶
Reduce sequence of elements using func. API mirrors functools.reduce
seq([1, 2, 3]).reduce(lambda x, y: x + y) 6
Parameters: | func – two parameter, associative reduce function initial – single optional argument acting as initial value |
---|---|
Returns: | reduced value using func |
Reduces a sequence of (Key, Value) using func on each sequence of values.
seq([('a', 1), ('b', 2), ('b', 3), ('b', 4), ('c', 3), ('c', 0)]) .reduce_by_key(lambda x, y: x + y) [('a', 1), ('c', 3), ('b', 9)]
Parameters: | func – reduce each list of values using two parameter, associative func |
---|---|
Returns: | Sequence of tuples where the value is reduced with func |
Returns the reversed sequence.
seq([1, 2, 3]).reverse() [3, 2, 1]
Returns: | reversed sequence |
---|
Sequence and other must be composed of (Key, Value) pairs. If self.sequence contains (K, V) pairs and other contains (K, W) pairs, the return result is a sequence of (K, (V, W)) pairs. W values will always bepresent, V values may be present or None.
seq([('a', 1), ('b', 2)]).join([('a', 3), ('c', 4)]) [('a', (1, 3)), ('b', (2, None)]
Parameters: | other – sequence to join with |
---|---|
Returns: | right joined sequence of (K, (V, W)) pairs |
Selects f from the elements of the sequence.
seq([1, 2, 3, 4]).select(lambda x: x * -1) [-1, -2, -3, -4]
Parameters: | func – function to select with |
---|---|
Returns: | sequence with func mapped onto it |
sequence
¶
Alias for to_list used internally for brevity
Returns: | result of to_list() on sequence |
---|
Converts sequence to a set of elements.
type(seq([])).to_set() set
type(seq([])) functional.pipeline.Sequence
seq([1, 1, 2, 2]).set() {1, 2}
:return:set of elements in sequence
show
(n=10, headers=(), tablefmt='simple', floatfmt='g', numalign='decimal', stralign='left', missingval='')[source]¶
Pretty print first n rows of sequence as a table. Seehttps://bitbucket.org/astanin/python-tabulate for details on tabulate parameters
Parameters: | n – Number of rows to show headers – Passed to tabulate tablefmt – Passed to tabulate floatfmt – Passed to tabulate numalign – Passed to tabulate stralign – Passed to tabulate missingval – Passed to tabulate |
---|
Return size of sequence using its length function.
Returns: | size of sequence |
---|
Takes a slice of the sequence starting at start and until but not including until.
seq([1, 2, 3, 4]).slice(1, 2) [2] seq([1, 2, 3, 4]).slice(1, 3) [2, 3]
Parameters: | start – starting index until – ending index |
---|---|
Returns: | slice including start until but not including until |
sliding
(size, step=1)[source]¶
Groups elements in fixed size blocks by passing a sliding window over them.
The last window has at least one element but may have less than size elements
Parameters: | size – size of sliding window step – step size between windows |
---|---|
Returns: | sequence of sliding windows |
Alias to Sequence.starmap
starmaps f onto the sequence as itertools.starmap does.
seq([(2, 3), (-2, 1), (0, 10)]).smap(lambda x, y: x + y) [5, -1, 10]
Parameters: | func – function to starmap with |
---|---|
Returns: | sequence with func starmapped onto it |
sorted
(key=None, reverse=False)[source]¶
Uses python sort and its passed arguments to sort the input.
seq([2, 1, 4, 3]).sorted() [1, 2, 3, 4]
Parameters: | key – sort using key function reverse – return list reversed or not |
---|---|
Returns: | sorted sequence |
starmaps f onto the sequence as itertools.starmap does.
seq([(2, 3), (-2, 1), (0, 10)]).starmap(lambda x, y: x + y) [5, -1, 10]
Parameters: | func – function to starmap with |
---|---|
Returns: | sequence with func starmapped onto it |
Takes sum of elements in sequence.
seq([1, 2, 3, 4]).sum() 10
seq([(1, 2), (1, 3), (1, 4)]).sum(lambda x: x[0]) 3
Parameters: | projection – function to project on the sequence before taking the sum |
---|---|
Returns: | sum of elements in sequence |
symmetric_difference
(other)[source]¶
New sequence with elements in either sequence or other, but not both.
seq([1, 2, 3, 3]).symmetric_difference([2, 4, 5]) [1, 3, 4, 5]
Parameters: | other – sequence to perform symmetric difference with |
---|---|
Returns: | symmetric difference of sequence and other |
tabulate
(n=None, headers=(), tablefmt='simple', floatfmt='g', numalign='decimal', stralign='left', missingval='')[source]¶
Return pretty string table of first n rows of sequence or everything if n is None. Seehttps://bitbucket.org/astanin/python-tabulate for details on tabulate parameters
Parameters: | n – Number of rows to show, if set to None return all rows headers – Passed to tabulate tablefmt – Passed to tabulate floatfmt – Passed to tabulate numalign – Passed to tabulate stralign – Passed to tabulate missingval – Passed to tabulate |
---|
Returns the sequence, without its first element.
seq([1, 2, 3]).tail() [2, 3]
Returns: | sequence without first element |
---|
Returns consecutive tails of the sequence.
seq([1, 2, 3]).tails() [[1, 2, 3], [2, 3], [3], []]
Returns: | consecutive tail()s of the sequence |
---|
Take the first n elements of the sequence.
seq([1, 2, 3, 4]).take(2) [1, 2]
Parameters: | n – number of elements to take |
---|---|
Returns: | first n elements of sequence |
Take elements in the sequence until func evaluates to False, then return them.
seq([1, 2, 3, 4, 5, 1, 2]).take_while(lambda x: x < 3) [1, 2]
Parameters: | func – truth returning function |
---|---|
Returns: | elements taken until func evaluates to False |
to_csv
(path, mode='wt', dialect='excel', compression=None, newline='', **fmtparams)[source]¶
Saves the sequence to a csv file. Each element should be an iterable which will be expanded to the elements of each row.
Parameters: | path – path to write file mode – file open mode dialect – passed to csv.writer fmtparams – passed to csv.writer |
---|
to_dict
(default=None)[source]¶
Converts sequence of (Key, Value) pairs to a dictionary.
type(seq([('a', 1)]).to_dict()) dict
seq([('a', 1), ('b', 2)]).to_dict() {'a': 1, 'b': 2}
Parameters: | default – Can be a callable zero argument function. When not None, the returned dictionary is a collections.defaultdict with default as value for missing keys. If the value is not callable, then a zero argument lambda function is created returning the value and used for collections.defaultdict |
---|---|
Returns: | dictionary from sequence of (Key, Value) elements |
to_file
(path, delimiter=None, mode='wt', buffering=-1, encoding=None, errors=None, newline=None, compresslevel=9, format=None, check=-1, preset=None, filters=None, compression=None)[source]¶
Saves the sequence to a file by executing str(self) which becomes str(self.to_list()). If delimiter is defined will instead execute self.make_string(delimiter)
Parameters: | path – path to write file delimiter – if defined, will call make_string(delimiter) and save that to file. mode – file open mode buffering – passed to builtins.open encoding – passed to builtins.open errors – passed to builtins.open newline – passed to builtins.open compression – compression format compresslevel – passed to gzip.open format – passed to lzma.open check – passed to lzma.open preset – passed to lzma.open filters – passed to lzma.open |
---|
to_json
(path, root_array=True, mode='wt', compression=None)[source]¶
Saves the sequence to a json file. If root_array is True, then the sequence will be written to json with an array at the root. If it is False, then the sequence will be converted from a sequence of (Key, Value) pairs to a dictionary so that the json root is a dictionary.
Parameters: | path – path to write file root_array – write json root as an array or dictionary mode – file open mode |
---|
to_jsonl
(path, mode='wb', compression=None)[source]¶
Saves the sequence to a jsonl file. Each element is mapped using json.dumps then written with a newline separating each element.
Parameters: | path – path to write file mode – mode to write in, defaults to ‘w’ to overwrite contents compression – compression format |
---|
Converts sequence to list of elements.
type(seq([]).to_list()) list
type(seq([])) functional.pipeline.Sequence
seq([1, 2, 3]).to_list() [1, 2, 3]
Parameters: | n – Take n elements of sequence if not None |
---|---|
Returns: | list of elements in sequence |
to_pandas
(columns=None)[source]¶
Converts sequence to a pandas DataFrame using pandas.DataFrame.from_records
Parameters: | columns – columns for pandas to use |
---|---|
Returns: | DataFrame of sequence |
Converts sequence to a set of elements.
type(seq([])).to_set() set
type(seq([])) functional.pipeline.Sequence
seq([1, 1, 2, 2]).to_set() {1, 2}
:return:set of elements in sequence
to_sqlite3
(conn, target, *args, **kwargs)[source]¶
Saves the sequence to sqlite3 database. Target table must be created in advance. The table schema is inferred from the elements in the sequence if only target table name is supplied.
seq([(1, 'Tom'), (2, 'Jack')]) .to_sqlite3('users.db', 'INSERT INTO user (id, name) VALUES (?, ?)')
seq([{'id': 1, 'name': 'Tom'}, {'id': 2, 'name': 'Jack'}]).to_sqlite3(conn, 'user')
Parameters: | conn – path or sqlite connection, cursor target – SQL query string or table name args – passed to sqlite3.connect kwargs – passed to sqlite3.connect |
---|
New sequence with unique elements from self and other.
seq([1, 1, 2, 3, 3]).union([1, 4, 5]) [1, 2, 3, 4, 5]
Parameters: | other – sequence to union with |
---|---|
Returns: | union of sequence and other |
Selects elements where func evaluates to True.
seq([-1, 1, -2, 2]).where(lambda x: x > 0) [1, 2]
Parameters: | func – function to filter on |
---|---|
Returns: | filtered sequence |
Zips the stored sequence with the given sequence.
seq([1, 2, 3]).zip([4, 5, 6]) [(1, 4), (2, 5), (3, 6)]
Parameters: | sequence – second sequence to zip |
---|---|
Returns: | stored sequence zipped with given sequence |
zip_with_index
(start=0)[source]¶
Zips the sequence to its index, with the index being the second element of each tuple.
seq(['a', 'b', 'c']).zip_with_index() [('a', 0), ('b', 1), ('c', 2)]
Returns: | sequence zipped to its index |
---|
functional.pipeline.
extend
(func=None, aslist=False, final=False, name=None, parallel=False)[source]¶
Function decorator for adding new methods to the Sequence class.
@extend() def zip2(it): return [(i,i) for i in it]
seq.range(3).zip2() [(0, 0), (1, 1), (2, 2)]
@extend(aslist=True) def zip2(it): return zip(it,it)
seq.range(3).zip2() [(0, 0), (1, 1), (2, 2)]
@extend(final=True) def make_set(it): return set(it)
r = seq([0,1,1]).make_set() r {0, 1}
type(r) <class 'set'>
Parameters: | func – function to decorate aslist – if True convert input sequence to list (default False) final – If True decorated function does not return a sequence. Useful for creating functions such as to_list. name – name of the function (default function definition name) parallel – if true the function is executed in parallel execution strategy (default False) |
---|