module types_linq.enumerable
class Enumerable[TSource_co]
from types_linq import Enumerable
Provides a set of helper methods for querying iterable objects.
Bases
Sequence[
TSource_co
]
Generic[
TSource_co
]
Members
instancemethod __init__(__iterable)
- Parameters
__iterable:
Iterable[
TSource_co
]
- Returns
None
Wraps an iterable.
instancemethod __init__(__iterable_factory)
- Parameters
__iterable_factory:
Callable[[], Iterable[
TSource_co
]]
- Returns
None
Wraps an iterable returned from the iterable factory. The factory will be called whenever an enumerating operation is performed.
instancemethod __contains__(value)
- Parameters
value:
object
- Returns
bool
Tests whether the sequence contains the specified element. Prefers calling __contains__()
on the wrapped iterable if available, otherwise, calls self.contains()
.
- Example
>>> en = Enumerable([1, 10, 100]) >>> 1000 in en False
instancemethod __getitem__(index)
- Parameters
index:
int
- Returns
Returns the element at specified index in the sequence. Prefers calling __getitem__()
on the
wrapped iterable if available, otherwise, calls self.element_at()
.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen())[1] 10
instancemethod __getitem__[TDefault](__index_and_default)
- Parameters
__index_and_default:
Tuple[int,
TDefault
]
- Returns
Union[
TSource_co
,
TDefault
]
Returns the element at specified index in the sequence or returns the default value if it does not
exist. Prefers calling __getitem__()
on the wrapped iterable if available, otherwise, calls
self.element_at()
.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen())[3, 1000] 1000
- Revisions
v1.0.0: New.
instancemethod __getitem__(index)
- Parameters
index:
slice
- Returns
Produces a subsequence defined by the given slice notation. Prefers calling __getitem__()
on the
wrapped iterable if available, otherwise, calls self.elements_in()
.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100; yield 1000; yield 10000 >>> Enumerable(gen())[1:3].to_list() [10, 100]
instancemethod __iter__()
- Returns
Iterator[
TSource_co
]
Returns an iterator that enumerates the values in the sequence.
- Example
def gen(): print('working...') yield 1; yield 10; yield 100 query = Enumerable(gen()).select(lambda e: e * 1000) print('go!') for e in query: print(e) # output: # go! # working... # 1000 # 10000 # 100000
instancemethod __len__()
- Returns
int
Returns the number of elements in the sequence. Prefers calling __len__()
on the wrapped iterable
if available, otherwise, calls self.count()
.
- Example
>>> en = Enumerable([1, 10, 100]) >>> len(en) 3
instancemethod __reversed__()
- Returns
Iterator[
TSource_co
]
Inverts the order of the elements in the sequence. Prefers calling __reversed__()
on the wrapped
iterable if available, otherwise, calls self.reverse()
.
- Example
>>> ints = [1, 10, 100] >>> en = Enumerable(ints) >>> for e in reversed(en): ... print(e) 100 10 1
instancemethod aggregate[TAccumulate, TResult](__seed, __func, __result_selector)
- Parameters
__seed:
TAccumulate
__func:
Callable[[
TAccumulate
,
TSource_co
],
TAccumulate
]
__result_selector:
Callable[[
TAccumulate
],
TResult
]
- Returns
Applies an accumulator function over the sequence. The seed is used as the initial accumulator value, and the result_selector is used to select the result value.
- Example
>>> fruits = ['apple', 'mango', 'orange', 'passionfruit', 'grape'] >>> Enumerable(fruits).aggregate('banana', lambda acc, e: e if len(e) > len(acc) else acc, str.upper) 'PASSIONFRUIT'
instancemethod aggregate[TAccumulate](__seed, __func)
- Parameters
__seed:
TAccumulate
__func:
Callable[[
TAccumulate
,
TSource_co
],
TAccumulate
]
- Returns
Applies an accumulator function over the sequence. The seed is used as the initial accumulator value.
- Example
>>> words = 'the quick brown fox jumps over the lazy dog'.split(' ') >>> Enumerable(words).aggregate('end', lambda acc, e: f'{e} {acc}') 'dog lazy the over jumps fox brown quick the end'
instancemethod aggregate(__func)
- Parameters
__func:
Callable[[
TSource_co
,
TSource_co
],
TSource_co
]
- Returns
Applies an accumulator function over the sequence. Raises InvalidOperationError
if
there is no value in the sequence.
- Example
>>> words = 'the quick brown fox jumps over the lazy dog'.split(' ') >>> Enumerable(words).aggregate(lambda acc, e: f'{e} {acc}') 'dog lazy the over jumps fox brown quick the'
- Example
>>> Enumerable.range(1, 10).aggregate(lambda acc, e: acc * e) 3628800
- Revisions
v1.2.0: Fixed annotation for __func.
instancemethod all(predicate)
- Parameters
predicate:
Callable[[
TSource_co
], bool]
- Returns
bool
Tests whether all elements of the sequence satisfy a condition.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).all(lambda e: e % 2 == 1) True
instancemethod any()
- Returns
bool
Tests whether the sequence has any elements.
- Example
>>> Enumerable([]).any() False >>> Enumerable([1]).any() True
instancemethod any(__predicate)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
- Returns
bool
Tests whether any element of the sequence satisfy a condition.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).any(lambda e: e % 2 == 0) False
instancemethod append(element)
- Parameters
element:
TSource_co
- Returns
Appends a value to the end of the sequence. Again, this does not affect the original wrapped object.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).append(11).to_list() [1, 3, 5, 7, 9, 11] >>> ints [1, 3, 5, 7, 9]
instancemethod as_cached(*, cache_capacity=None)
- Parameters
cache_capacity:
Optional[int]
- Returns
Returns a CachedEnumerable to cache the enumerated results in this query so that if the wrapped iterable is not repeatable (e.g. generator object), it will be repeatable.
By default, Enumerable
s constructed from nonrepeatable sources cannot be enumerated multiple
times, for example
def gen():
yield 1
yield 0
yield 3
query = Enumerable(gen())
print(query.count())
print(query.where(lambda x: x > 0).to_list())
prints 3
followed by an empty list []
. This is because the .count()
exhausts the
contents in the generator before the second query is run.
To avoid the issue, use this method which saves the results along the way.
query = Enumerable(gen()).as_cached()
print(query.count())
print(query.take(2).to_list())
print(query.where(lambda x: x > 0).to_list())
printing 3
, [1, 0]
and [1, 3]
.
This is an alternative way to deal with non-repeatable sources other than passing function
(query = Enumerable(gen)
) or solidifying the source in advance
(query = Enumerable(list(gen))
).
This method is useless if you have constructed an Enumerable from a repeatable source such as
a builtin list, an iterable factory mentioned above, or other Enumerable
’s query methods.
If cache_capacity is None, it is infinite.
Raises InvalidOperationError
if cache_capacity is negative.
The behavior of this method differs from that of CachedEnumerable
.
- Revisions
v0.1.1: New.
instancemethod as_more()
- Returns
Returns a MoreEnumerable that has more non-standard query methods available.
- Example
>>> Enumerable([1, 2, 3]).as_more()
- Revisions
v0.2.0: New.
instancemethod average[TResult]()
- Constraint
self:
Enumerable
[
SupportsAverage
[
TResult
]]
- Returns
Computes the average value of the sequence. Raises InvalidOperationError
if there
is no value.
- Example
>>> ints = [1, 3, 5, 9, 11] >>> Enumerable(ints).average() 5.8
instancemethod average[TResult](__selector)
- Parameters
__selector:
Callable[[
TSource_co
],
SupportsAverage
[
TResult
]]
- Returns
Computes the average value of the sequence using the selector. Raises
InvalidOperationError
if there is no value.
- Example
>>> strs = ['1', '3', '5', '9', '11'] >>> Enumerable(strs).average(lambda e: int(e) * 1000) 5800.0
instancemethod average2[TResult, TDefault](__default)
- Constraint
self:
Enumerable
[
SupportsAverage
[
TResult
]]
- Parameters
__default:
TDefault
- Returns
Computes the average value of the sequence. Returns default
if there is no value.
- Example
>>> Enumerable([1, 2]).average2(0) 1.5 >>> Enumerable([]).average2(0) 0
instancemethod average2[TResult, TDefault](__selector, __default)
- Parameters
__selector:
Callable[[
TSource_co
],
SupportsAverage
[
TResult
]]
__default:
TDefault
- Returns
Computes the average value of the sequence using the selector. Returns default
if there
is no value.
- Example
>>> Enumerable([]).average2(lambda e: int(e) * 1000, 0) 0
instancemethod cast[TResult](__t_result)
- Parameters
__t_result:
Type[
TResult
]
- Returns
Casts the elements to the specified type.
This method does not change anything. It returns the original Enumerable reference unchanged.
- Example
query: Enumerable[object] = ... same_query: Enumerable[int] = query.cast(int)
instancemethod chunk(size)
- Parameters
size:
int
- Returns
Enumerable
[MutableSequence[
TSource_co
]]
Splits the elements of a sequence into chunks of size at most the provided size. Raises
InvalidOperationError
if size
is less than 1.
- Example
>>> def source(i): ... while True: ... yield i ... i *= 3 >>> en = Enumerable(source(1)).chunk(4).take(3) >>> for chunk in en: ... print(chunk) [1, 3, 9, 27] [81, 243, 729, 2187] [6561, 19683, 59049, 177147]
- Revisions
v1.0.0: New.
instancemethod concat(second)
- Parameters
second:
Iterable[
TSource_co
]
- Returns
Concatenates two sequences.
- Example
>>> en1 = Enumerable([1, 2, 3]) >>> en2 = Enumerable([1, 2, 4]) >>> en1.concat(en2).to_list() [1, 2, 3, 1, 2, 4]
instancemethod contains(value)
- Parameters
value:
object
- Returns
bool
Tests whether the sequence contains the specified element using ==
.
This method always uses a generic element-finding method (O(n)) regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).contains(11) False
instancemethod contains[TOther](value, __comparer)
- Parameters
value:
TOther
__comparer:
Callable[[
TSource_co
,
TOther
], bool]
- Returns
bool
Tests whether the sequence contains the specified element using the provided comparer that returns True if two values are equal.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).contains('9', lambda x, y: str(x) == y) True
instancemethod count()
- Returns
int
Returns the number of elements in the sequence.
This method always uses a generic length-finding method (O(n)) regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).count() 3
instancemethod count(__predicate)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
- Returns
int
Returns the number of elements that satisfy the condition.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).count(lambda e: e % 10 == 0) 2
instancemethod default_if_empty[TDefault](default)
- Parameters
default:
TDefault
- Returns
Union[
Enumerable
[
TSource_co
],
Enumerable
[
TDefault
]]
Returns the elements of the sequence or the provided value in a singleton collection if the sequence is empty.
- Example
>>> Enumerable([]).default_if_empty(0).to_list() [0] >>> Enumerable([44, 45, 56]).default_if_empty(0).to_list() [44, 45, 56]
instancemethod distinct()
- Returns
Returns distinct elements from the sequence.
- Example
>>> ints = [1, 4, 5, 6, 4, 3, 1, 99] >>> Enumerable(ints).distinct().to_list() [1, 4, 5, 6, 3, 99]
- Revisions
v0.2.1: Added preliminary support for unhashable values.
instancemethod distinct_by(key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
], object]
- Returns
Returns distinct elements from the sequence where “distinctness” is determined by the value returned by the selector.
- Example
>>> ints = [1, 4, 5, 6, 4, 3, 1, 99] >>> Enumerable(ints).distinct_by(lambda x: x // 2).to_list() [1, 4, 6, 3, 99]
- Revisions
v1.0.0: New. The method with same name (but different return type) in MoreEnumerable class was removed.
instancemethod element_at(index)
- Parameters
index:
int
- Returns
Returns the element at specified index in the sequence. IndexOutOfRangeError
is raised if
no such element exists.
If the index is negative, it means counting from the end.
This method always uses a generic list element-finding method (O(n)) regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).element_at(1) 10 >>> Enumerable(gen()).element_at(-1) 100
- Revisions
v1.0.0: Added support for negative index.
instancemethod element_at[TDefault](index, __default)
- Parameters
index:
int
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the element at specified index in the sequence. Default value is returned if no such element exists.
If the index is negative, it means counting from the end.
This method always uses a generic list element-finding method (O(n)) regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).element_at(3, 0) 0
- Revisions
v1.0.0: Added support for negative index.
staticmethod empty()
- Returns
Returns an empty enumerable.
- Example
>>> en := Enumerable.empty() <types_linq.enumerable.Enumerable at 0x00000000000> >>> en.to_list() []
instancemethod except1(second)
- Parameters
second:
Iterable[
TSource_co
]
- Returns
Produces the set difference of two sequences: self - second.
Note except
is a keyword in Python.
- Example
>>> ints = [1, 2, 3, 4, 5] >>> Enumerable(ints).except1([1, 3, 5, 7, 9]).to_list() [2, 4]
- Revisions
v0.2.1: Added preliminary support for unhashable values.
instancemethod except_by[TKey](second, key_selector)
- Parameters
second:
Iterable[
TKey
]
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Produces the set difference of two sequences: self - second, according to a key selector that determines “distinctness”.
- Example
>>> first = [(16, 'x'), (9, 'y'), (12, 'd'), (16, 't')] >>> second = ['y', 'd'] >>> Enumerable(first).except_by(second, lambda x: x[1]).to_list() [(16, 'x'), (16, 't')]
- Revisions
v1.0.0: New. The method with same name (but different usage) in MoreEnumerable class was renamed as
except_by2()
to accommodate this.
instancemethod first()
- Returns
Returns the first element of the sequence. Raises InvalidOperationError
if there is no
first element.
This method always uses a generic method to enumerate the first element regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).first() 1
instancemethod first(__predicate)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
- Returns
Returns the first element of the sequence that satisfies the condition. Raises
InvalidOperationError
if no such element exists.
- Example
>>> ints = [1, 3, 5, 7, 9, 11, 13] >>> Enumerable(ints).first(lambda e: e > 10) 11
instancemethod first2[TDefault](__default)
- Parameters
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the first element of the sequence or a default value if there is no such element.
This method always uses a generic method to enumerate the first element regardless the implementation of the wrapped iterable.
- Example
>>> def gen(ok: bool): ... if ok: ... yield 1; yield 10; yield 100 >>> Enumerable(gen(True)).first2(0) 1 >>> Enumerable(gen(False)).first2(0) 0
instancemethod first2[TDefault](__predicate, __default)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the first element of the sequence that satisfies the condition or a default value if no such element exists.
- Example
>>> ints = [1, 3, 5, 7, 9, 11, 13] >>> Enumerable(ints).first2(lambda e: e > 100, 100) 100
instancemethod group_by[TKey, TValue, TResult](key_selector, value_selector, __result_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
value_selector:
Callable[[
TSource_co
],
TValue
]
__result_selector:
Callable[[
TKey
,
Enumerable
[
TValue
]],
TResult
]
- Returns
Groups the elements of the sequence according to specified key selector and value selector. Then it returns the result value using each grouping and its key.
- Example
>>> pets_list = [ ... ('Barley', 8.3), ('Boots', 4.9), ('Whiskers', 1.5), ('Daisy', 4.3), ... ('Roman', 8.6), ('Fangus', 8.6), ('Roam', 2.2), ('Roll', 1.4), ... ] >>> en = Enumerable(pets_list).group_by( ... lambda pet: math.floor(pet[1]), ... lambda pet: pet[0], ... lambda age_floored, names: (age_floored, names.to_set()), ... ) >>> for obj in en: ... print(obj) (8, {'Fangus', 'Roman', 'Barley'}) (4, {'Boots', 'Daisy'}) (1, {'Roll', 'Whiskers'}) (2, {'Roam'})
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod group_by[TKey, TValue](key_selector, value_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
value_selector:
Callable[[
TSource_co
],
TValue
]
- Returns
Groups the elements of the sequence according to specified key selector and value selector.
- Example
>>> en = Enumerable(pets_list).group_by( ... lambda pet: math.floor(pet[1]), ... lambda pet: pet[0], ... ) >>> for grouping in en: ... print(grouping.key, grouping.to_set()) 8 {'Fangus', 'Roman', 'Barley'} 4 {'Boots', 'Daisy'} 1 {'Roll', 'Whiskers'} 2 {'Roam'}
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod group_by2[TKey, TResult](key_selector, __result_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
__result_selector:
Callable[[
TKey
,
Enumerable
[
TSource_co
]],
TResult
]
- Returns
Groups the elements of the sequence according to a specified key selector function and creates a result value using each grouping and its key.
- Example
>>> en = Enumerable(pets_list).group_by2( ... lambda pet: math.floor(pet[1]), ... lambda age_floored, pets: (age_floored, pets.to_list()), ... ) >>> for obj in en: ... print(obj) (8, [('Barley', 8.3), ('Roman', 8.6), ('Fangus', 8.6)]) (4, [('Boots', 4.9), ('Daisy', 4.3)]) (1, [('Whiskers', 1.5), ('Roll', 1.4)]) (2, [('Roam', 2.2)])
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod group_by2[TKey](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Groups the elements of the sequence according to a specified key selector function.
- Example
>>> en = Enumerable(pets_list).group_by2( ... lambda pet: math.floor(pet[1]), ... ) >>> for grouping in en: ... print(grouping.key, grouping.to_list()) 8 [('Barley', 8.3), ('Roman', 8.6), ('Fangus', 8.6)] 4 [('Boots', 4.9), ('Daisy', 4.3)] 1 [('Whiskers', 1.5), ('Roll', 1.4)] 2 [('Roam', 2.2)]
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod group_join[TInner, TKey, TResult](inner, outer_key_selector, inner_key_selector, result_selector)
- Parameters
inner:
Iterable[
TInner
]
outer_key_selector:
Callable[[
TSource_co
],
TKey
]
result_selector:
Callable[[
TSource_co
,
Enumerable
[
TInner
]],
TResult
]
- Returns
Correlates the elements of two sequences based on equality of keys and groups the results using the selector.
In normal cases, the iteration preserves order of elements in self (outer), and for each element in self, the order of matching elements from inner.
Unhashable keys are supported (where hashibility is determined by checking typing.Hashable
). If any
keys formed by key selectors involve such types, the order is unspecified.
- Example
>>> class Person(NamedTuple): ... name: str >>> class Pet(NamedTuple): ... name: str ... owner: Person >>> magnus = Person('Hedlund, Magnus') >>> terry = Person('Adams, Terry') >>> charlotte = Person('Weiss, Charlotte') >>> poor = Person('Animal, No') >>> barley = Pet('Barley', owner=terry) >>> boots = Pet('Boots', owner=terry) >>> whiskers = Pet('Whiskers', owner=charlotte) >>> daisy = Pet('Daisy', owner=magnus) >>> roman = Pet('Roman', owner=terry) >>> people = [magnus, terry, charlotte, poor] >>> pets = [barley, boots, whiskers, daisy, roman] >>> en = Enumerable(people).group_join( ... pets, ... lambda person: person, ... lambda pet: pet.owner, ... lambda person, pet_collection: ( ... person.name, ... pet_collection.select(lambda pet: pet.name).to_set(), ... ), ... ) >>> for obj in en: ... print(obj) ('Hedlund, Magnus', {'Daisy'}) ('Adams, Terry', {'Boots', 'Roman', 'Barley'}) ('Weiss, Charlotte', {'Whiskers'}) ('Animal, No', set())
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod intersect(second)
- Parameters
second:
Iterable[
TSource_co
]
- Returns
Produces the set intersection of two sequences: self & second.
- Example
>>> ints = [1, 3, 5, 7, 9, 11] >>> Enumerable(ints).intersect([1, 2, 3, 4, 5]).to_list() [1, 3, 5]
- Revisions
v0.2.1: Added preliminary support for unhashable values.
instancemethod intersect_by[TKey](second, key_selector)
- Parameters
second:
Iterable[
TKey
]
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Produces the set intersection of two sequences: self & second according to a specified key selector.
- Example
>>> strs = ['+1', '-3', '+5', '-7', '+9', '-11'] >>> Enumerable(strs).intersect_by([1, 2, 3, 5, 9], lambda x: abs(int(x))).to_list() ['+1', '-3', '+5', '+9']
- Revisions
v1.0.0: New.
instancemethod join[TInner, TKey, TResult](inner, outer_key_selector, inner_key_selector, result_selector)
- Parameters
inner:
Iterable[
TInner
]
outer_key_selector:
Callable[[
TSource_co
],
TKey
]
result_selector:
Callable[[
TSource_co
,
TInner
],
TResult
]
- Returns
Correlates the elements of two sequences based on matching keys.
In normal cases, the iteration preserves order of elements in self (outer), and for each element in self, the order of matching elements from inner.
Unhashable keys are supported (where hashibility is determined by checking typing.Hashable
). If any
keys formed by key selectors involve such types, the order is unspecified.
- Example
# Please refer to group_join() for definition of people and pets >>> en = Enumerable(people).join( ... pets, ... lambda person: person, ... lambda pet: pet.owner, ... lambda person, pet: (person.name, pet.name), ... ) >>> for obj in en: ... print(obj) ('Hedlund, Magnus', 'Daisy') ('Adams, Terry', 'Barley') ('Adams, Terry', 'Boots') ('Adams, Terry', 'Roman') ('Weiss, Charlotte', 'Whiskers')
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod last()
- Returns
Returns the last element of the sequence. Raises InvalidOperationError
if there is no first
element.
This method always uses a generic method to enumerate the last element (O(n)) regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).last() 100
instancemethod last(__predicate)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
- Returns
Returns the last element of the sequence that satisfies the condition. Raises
InvalidOperationError
if no such element exists.
- Example
>>> ints = [1, 3, 5, 7, 9, 11, 13] >>> Enumerable(ints).last(lambda e: e < 10) 9
instancemethod last2[TDefault](__default)
- Parameters
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the last element of the sequence or a default value if there is no such element.
This method always uses a generic method to enumerate the last element (O(n)) regardless the implementation of the wrapped iterable.
- Example
>>> def gen(ok: bool): ... if ok: ... yield 1; yield 10; yield 100 >>> Enumerable(gen(True)).last2(9999) 100 >>> Enumerable(gen(False)).last2(9999) 9999
instancemethod last2[TDefault](__predicate, __default)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the last element of the sequence that satisfies the condition or a default value if no such element exists.
- Example
>>> ints = [13, 11, 9, 7, 5, 3, 1] >>> Enumerable(ints).last2(lambda e: e < 0, 9999) 9999
instancemethod max[TSupportsLessThan]()
- Constraint
self:
Enumerable
[
TSupportsLessThan
]
- Returns
Returns the maximum value in the sequence. Raises InvalidOperationError
if there is no value.
- Example
>>> nums = [1, 5, 2.2, 5, 1, 2] >>> Enumerable(nums).max() 5
instancemethod max[TSupportsLessThan](__result_selector)
- Parameters
__result_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
- Returns
Invokes a transform function on each element of the sequence and returns the maximum of the
resulting values. Raises InvalidOperationError
if there is no value.
- Example
>>> strs = ['aaa', 'bb', 'c', 'dddd'] >>> Enumerable(strs).max(len) 4
instancemethod max2[TSupportsLessThan, TDefault](__default)
- Constraint
self:
Enumerable
[
TSupportsLessThan
]
- Parameters
__default:
TDefault
- Returns
Union[
TSupportsLessThan
,
TDefault
]
Returns the maximum value in the sequence, or the default one if there is no value.
- Example
>>> Enumerable([]).max2(0) 0
instancemethod max2[TSupportsLessThan, TDefault](__result_selector, __default)
- Parameters
__result_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
__default:
TDefault
- Returns
Union[
TSupportsLessThan
,
TDefault
]
Invokes a transform function on each element of the sequence and returns the maximum of the resulting values. Returns the default one if there is no value.
- Example
>>> Enumerable([]).max2(len, 0) 0 >>> Enumerable(['a']).max2(len, 0) 1
instancemethod max_by[TSupportsLessThan](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
- Returns
Returns the maximal element of the sequence based on the given key selector. Raises
InvalidOperationError
if there is no value.
- Example
>>> strs = ['aaa', 'bb', 'c', 'dddd'] >>> Enumerable(strs).max_by(len) 'dddd'
- Revisions
v1.0.0: New.
instancemethod max_by[TKey](key_selector, __comparer)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Returns the maximal element of the sequence based on the given key selector and the comparer.
Raises InvalidOperationError
if there is no value.
Such comparer takes two values and return positive ints when lhs > rhs, negative ints if lhs < rhs, and 0 if they are equal.
- Revisions
v1.0.0: New.
instancemethod min[TSupportsLessThan]()
- Constraint
self:
Enumerable
[
TSupportsLessThan
]
- Returns
Returns the minimum value in the sequence. Raises InvalidOperationError
if there is no value.
instancemethod min[TSupportsLessThan](__result_selector)
- Parameters
__result_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
- Returns
Invokes a transform function on each element of the sequence and returns the minimum of the
resulting values. Raises InvalidOperationError
if there is no value.
instancemethod min2[TSupportsLessThan, TDefault](__default)
- Constraint
self:
Enumerable
[
TSupportsLessThan
]
- Parameters
__default:
TDefault
- Returns
Union[
TSupportsLessThan
,
TDefault
]
Returns the minimum value in the sequence, or the default one if there is no value.
instancemethod min2[TSupportsLessThan, TDefault](__result_selector, __default)
- Parameters
__result_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
__default:
TDefault
- Returns
Union[
TSupportsLessThan
,
TDefault
]
Invokes a transform function on each element of the sequence and returns the minimum of the resulting values. Returns the default one if there is no value.
instancemethod min_by[TSupportsLessThan](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
- Returns
Returns the minimal element of the sequence based on the given key selector. Raises
InvalidOperationError
if there is no value.
- Revisions
v1.0.0: New.
instancemethod min_by[TKey](key_selector, __comparer)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Returns the minimal element of the sequence based on the given key selector and the comparer.
Raises InvalidOperationError
if there is no value.
Such comparer takes two values and return positive ints when lhs > rhs, negative ints if lhs < rhs, and 0 if they are equal.
- Revisions
v1.0.0: New.
instancemethod of_type[TResult](t_result)
- Parameters
t_result:
Type[
TResult
]
- Returns
Filters elements based on the specified type.
Builtin isinstance()
is used.
- Example
>>> lst = [1, 14, object(), True, []] >>> Enumerable(lst).of_type(int).to_list() [1, 14, True]
instancemethod order_by[TSupportsLessThan](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
- Returns
Sorts the elements of the sequence in ascending order according to a key.
- Example
>>> ints = [8, 4, 5, 2] >>> Enumerable(ints).order_by(lambda e: e).to_list() [2, 4, 5, 8]
- Example
>>> class Pet(NamedTuple): ... name: str ... age: int >>> pets = [Pet('Barley', 8), Pet('Boots', 4), Pet('Roman', 5)] >>> Enumerable(pets).order_by(lambda p: p.age) \ ... .select(lambda p: p.name) \ ... .to_list() ['Boots', 'Roman', 'Barley']
Subsequent ordering is supported. See OrderedEnumerable
.
instancemethod order_by[TKey](key_selector, __comparer)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Sorts the elements of the sequence in ascending order by using a specified comparer.
Such comparer takes two values and return positive ints when lhs > rhs, negative ints if lhs < rhs, and 0 if they are equal. In fact, this overload should not be used (see Sorting HOW TO).
- Example
>>> Enumerable(pets).order_by(lambda p: p, lambda pl, pr: pl.age - pr.age) \ ... .select(lambda p: p.name) \ ... .to_list() ['Boots', 'Roman', 'Barley']
instancemethod order_by_descending[TSupportsLessThan](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TSupportsLessThan
]
- Returns
Sorts the elements of the sequence in descending order according to a key.
- Example
>>> ints = [8, 4, 5, 2] >>> Enumerable(ints).order_by_descending(lambda e: e).to_list() [8, 5, 4, 2]
instancemethod order_by_descending[TKey](key_selector, __comparer)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Sorts the elements of the sequence in descending order by using a specified comparer.
Such comparer takes two values and return positive ints when lhs > rhs, negative ints if lhs < rhs, and 0 if they are equal.
instancemethod prepend(element)
- Parameters
element:
TSource_co
- Returns
Adds a value to the beginning of the sequence. Again, this does not affect the original wrapped object.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).prepend(-1).to_list() [-1, 1, 3, 5, 7, 9]
staticmethod range(start, count)
- Parameters
start:
int
count:
Optional[int]
- Returns
Enumerable
[int]
Generates a sequence of count
integral numbers from start
, incrementing each by one.
If count
is None
, the sequence is infinite. Raises InvalidOperationError
if count
is negative.
- Example
>>> Enumerable.range(-5, 6).to_list() [-5, -4, -3, -2, -1, 0]
staticmethod repeat[TResult](value, count=None)
- Parameters
value:
TResult
count:
Optional[int]
- Returns
Generates a sequence that contains one repeated value.
If count
is None
, the sequence is infinite. Raises InvalidOperationError
if count
is negative.
- Example
>>> Enumerable.repeat(0, 6).to_list() [0, 0, 0, 0, 0, 0]
instancemethod reverse()
- Returns
Inverts the order of the elements in the sequence.
This method always uses a generic reverse traversal method regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> Enumerable(gen()).reverse().to_list() [100, 10, 1]
instancemethod select[TResult](selector)
- Parameters
selector:
Callable[[
TSource_co
],
TResult
]
- Returns
Projects each element of the sequence into a new form.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).select(lambda e: '*' * e).to_list() ['*', '***', '*****', '*******', '*********']
instancemethod select2[TResult](selector)
- Parameters
selector:
Callable[[
TSource_co
, int],
TResult
]
- Returns
Projects each element of the sequence into a new form by incorporating the indices.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> Enumerable(ints).select2(lambda e, i: e * (i + 1)).to_list() [1, 6, 15, 28, 45]
instancemethod select_many[TCollection, TResult](collection_selector, __result_selector)
- Parameters
collection_selector:
Callable[[
TSource_co
], Iterable[
TCollection
]]
__result_selector:
Callable[[
TSource_co
,
TCollection
],
TResult
]
- Returns
Projects each element of the sequence into an iterable, flattens the resulting sequence into one sequence, then calls result_selector on each element therein.
- Example
>>> pet_owners = [ ... {'name': 'Higa', 'pets': ['Scruffy', 'Sam']}, ... {'name': 'Ashkenazi', 'pets': ['Walker', 'Sugar']}, ... {'name': 'Hines', 'pets': ['Dusty']}, ... ] >>> en = Enumerable(pet_owners).select_many( ... lambda owner: owner['pets'], ... lambda owner, name: (name, owner['name']), ... ) >>> for tup in en: ... print(tup) ('Scruffy', 'Higa') ('Sam', 'Higa') ('Walker', 'Ashkenazi') ('Sugar', 'Ashkenazi') ('Dusty', 'Hines')
instancemethod select_many[TResult](__selector)
- Parameters
__selector:
Callable[[
TSource_co
], Iterable[
TResult
]]
- Returns
Projects each element of the sequence to an iterable and flattens the resultant sequences.
- Example
>>> sentences = ['i select things', 'i do many times'] >>> Enumerable(sentences).select_many(str.split).to_list() ['i', 'select', 'things', 'i', 'do', 'many', 'times']
instancemethod select_many2[TCollection, TResult](collection_selector, __result_selector)
- Parameters
collection_selector:
Callable[[
TSource_co
, int], Iterable[
TCollection
]]
__result_selector:
Callable[[
TSource_co
,
TCollection
],
TResult
]
- Returns
Projects each element of the sequence into an iterable, flattens the resulting sequence into one sequence, then calls result_selector on each element therein. The indices of source elements are used.
instancemethod select_many2[TResult](__selector)
- Parameters
__selector:
Callable[[
TSource_co
, int], Iterable[
TResult
]]
- Returns
Projects each element of the sequence to an iterable and flattens the resultant sequences. The indices of source elements are used.
- Example
>>> dinner = ['Ramen with Egg and Beef', 'Gyoza', 'Fried Chicken'] >>> en = Enumerable(dinner).select_many2( ... lambda e, i: Enumerable(e.split(' ')) ... .where(lambda w: w[0].isupper()) ... .select(lambda w: f'Table {i}: {w}'), ... ) >>> for s in en: ... print(s) Table 0: Ramen Table 0: Egg Table 0: Beef Table 1: Gyoza Table 2: Fried Table 2: Chicken
instancemethod sequence_equal(second)
- Parameters
second:
Iterable[
TSource_co
]
- Returns
bool
Determines whether two sequences are equal using ==
on each element.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100 >>> lst = [1, 10, 100] >>> Enumerable(gen()).sequence_equal(lst) True
instancemethod sequence_equal[TOther](second, __comparer)
- Parameters
second:
Iterable[
TOther
]
__comparer:
Callable[[
TSource_co
,
TOther
], bool]
- Returns
bool
Determines whether two sequences are equal using a comparer that returns True if two values are equal, on each element.
- Example
>>> ints = [1, 3, 5, 7, 9] >>> strs = ['1', '3', '5', '7', '9'] >>> Enumerable(ints).sequence_equal(strs, lambda x, y: str(x) == y) True
- Revisions
v0.1.2: New.
instancemethod single()
- Returns
Returns the only element in the sequence. Raises InvalidOperationError
if the sequence does not
contain exactly one element.
- Example
>>> Enumerable([5]).single() 5
- Example
>>> lst = [5, 6] >>> try: ... print(Enumerable(lst).single()) ... except InvalidOperationError: ... print('Collection does not contain exactly one element. Sorry.') Collection does not contain exactly one element. Sorry.
instancemethod single(__predicate)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
- Returns
Returns the only element in the sequence that satisfies the condition. Raises InvalidOperationError
if no element satisfies the condition, or more than one do.
- Example
>>> ints = [1, 3, 5, 7, 9, 11, 9] >>> Enumerable(ints).single(lambda e: e > 10) 11 >>> try: ... Enumerable(ints).single(lambda e: e == 9) ... except InvalidOperationError: ... print('Too many nines!') Too many nines!
instancemethod single2[TDefault](__default)
- Parameters
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the only element in the sequence or the default value if the sequence is empty. Raises
InvalidOperationError
if there are more than one elements in the sequence.
- Example
>>> Enumerable([]).single2(0) 0
instancemethod single2[TDefault](__predicate, __default)
- Parameters
__predicate:
Callable[[
TSource_co
], bool]
__default:
TDefault
- Returns
Union[
TSource_co
,
TDefault
]
Returns the only element in the sequence that satisfies the condition, or the default value if there is
no such element. Raises InvalidOperationError
if there are more than one elements satisfying the
condition.
- Example
>>> fruits = ['apple', 'banana', 'mango'] >>> Enumerable(fruits).single2(lambda e: len(e) > 10, 'sorry') 'sorry'
instancemethod skip(count)
- Parameters
count:
int
- Returns
Bypasses a specified number of elements in the sequence and then returns the remaining.
- Example
>>> grades = [59, 82, 70, 56, 92, 98, 85] >>> Enumerable(grades).order_by_descending(lambda g: g).skip(3).to_list() [82, 70, 59, 56]
instancemethod skip_last(count)
- Parameters
count:
int
- Returns
Returns a new sequence that contains the elements of the current sequence with last count
elements
omitted.
- Example
>>> grades = [59, 82, 70, 56, 92, 98, 85] >>> Enumerable(grades).order_by_descending(lambda g: g).skip_last(3).to_list() [98, 92, 85, 82]
instancemethod skip_while(predicate)
- Parameters
predicate:
Callable[[
TSource_co
], bool]
- Returns
Bypasses elements in the sequence as long as the condition is true and then returns the remaining elements.
- Example
>>> grades = [59, 82, 70, 56, 92, 98, 85] >>> Enumerable(grades).order_by_descending(lambda g: g) \ ... .skip_while(lambda g: g >= 80) \ ... .to_list() [70, 59, 56]
instancemethod skip_while2(predicate)
- Parameters
predicate:
Callable[[
TSource_co
, int], bool]
- Returns
Bypasses elements in the sequence as long as the condition is true and then returns the remaining elements. The element’s index is used in the predicate function.
- Example
>>> amounts = [500, 250, 900, 800, 650, 400, 150, 550] >>> Enumerable(amounts).skip_while2(lambda a, i: a > i * 100).to_list() [400, 150, 550]
instancemethod sum[TSupportsAdd]()
- Constraint
self:
Enumerable
[
TSupportsAdd
]
- Returns
Union[
TSupportsAdd
, int]
Computes the sum of the sequence, or 0
if the sequence is empty.
- Example
>>> floats = [.1, .3, .5, .9, 1.1] >>> Enumerable(floats).sum() 2.9000000000000004
instancemethod sum[TSupportsAdd](__selector)
- Parameters
__selector:
Callable[[
TSource_co
],
TSupportsAdd
]
- Returns
Union[
TSupportsAdd
, int]
Computes the sum of the sequence using the selector. Returns 0
if the sequence is empty.
- Example
>>> floats = [.1, .3, .5, .9, 1.1] >>> Enumerable(floats).sum(lambda e: int(e * 1000)) 2900
instancemethod sum2[TSupportsAdd, TDefault](__default)
- Constraint
self:
Enumerable
[
TSupportsAdd
]
- Parameters
__default:
TDefault
- Returns
Union[
TSupportsAdd
,
TDefault
]
Computes the sum of the sequence. Returns the default value if it is empty.
- Example
>>> Enumerable([]).sum2(880) 880
instancemethod sum2[TSupportsAdd, TDefault](__selector, __default)
- Parameters
__selector:
Callable[[
TSource_co
],
TSupportsAdd
]
__default:
TDefault
- Returns
Union[
TSupportsAdd
,
TDefault
]
Computes the sum of the sequence using the selector. Returns the default value if it is empty.
- Example
>>> Enumerable([]).sum2(lambda e: int(e * 1000), 880) 880
instancemethod take(count)
- Parameters
count:
int
- Returns
Returns a specified number of contiguous elements from the start of the sequence.
- Example
>>> grades = [98, 92, 85, 82, 70, 59, 56] >>> Enumerable(grades).take(3).to_list() [98, 92, 85]
instancemethod take(__index)
- Parameters
__index:
slice
- Returns
Produces a subsequence defined by the given slice notation.
This method always uses a generic list slicing method regardless the implementation of the wrapped iterable.
This method currently is identical to elements_in()
when it takes a slice.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100; yield 1000; yield 10000 >>> Enumerable(gen()).take(slice(1, 3)).to_list() [10, 100]
- Revisions
v1.0.0: New.
instancemethod take_last(count)
- Parameters
count:
int
- Returns
Returns a new sequence that contains the last count
elements.
- Example
>>> grades = [98, 92, 85, 82, 70, 59, 56] >>> Enumerable(grades).take_last(3).to_list() [70, 59, 56]
instancemethod take_while(predicate)
- Parameters
predicate:
Callable[[
TSource_co
], bool]
- Returns
Returns elements from the sequence as long as the condition is true and skips the remaining.
- Example
>>> strs = ['1', '3', '5', '7', '', '1', '4', '5'] >>> Enumerable(strs).take_while(lambda g: g).to_list() ['1', '3', '5', '7']
instancemethod take_while2(predicate)
- Parameters
predicate:
Callable[[
TSource_co
, int], bool]
- Returns
Returns elements from the sequence as long as the condition is true and skips the remaining. The element’s index is used in the predicate function.
instancemethod to_dict[TKey, TValue](key_selector, __value_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
__value_selector:
Callable[[
TSource_co
],
TValue
]
- Returns
Enumerates all values and returns a dict containing them. key_selector and value_selector are used to select keys and values.
instancemethod to_dict[TKey](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Dict[
TKey
,
TSource_co
]
Enumerates all values and returns a dict containing them. key_selector is used to select keys.
instancemethod to_set()
- Returns
Set[
TSource_co
]
Enumerates all values and returns a set containing them.
instancemethod to_list()
- Returns
List[
TSource_co
]
Enumerates all values and returns a list containing them.
instancemethod to_lookup[TKey, TValue](key_selector, __value_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
__value_selector:
Callable[[
TSource_co
],
TValue
]
- Returns
Enumerates all values and returns a lookup containing them according to specified key selector and value selector. The values within each group are in the same order as in self.
- Example
>>> food = [ ... ('main', 'ramen'), ('main', 'noodles'), ('side', 'chicken'), ... ('main', 'spaghetti'), ('snack', 'popcorns'), ('side', 'apples'), ... ('side', 'orange'), ('drink', 'coke'), ('main', 'birthdaycake'), ... ] >>> lookup = Enumerable(food).to_lookup(lambda e: e[0], lambda e: e[1]) >>> lookup.select(lambda grouping: grouping.key).to_list() ['main', 'side', 'snack', 'drink'] >>> if 'side' in lookup: ... print(lookup['side'].to_list()) ['chicken', 'apples', 'orange']
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod to_lookup[TKey](key_selector)
- Parameters
key_selector:
Callable[[
TSource_co
],
TKey
]
- Returns
Enumerates all values and returns a lookup containing them according to the specified key selector. The values within each group are in the same order as in self.
- Revisions
v0.2.1: Added preliminary support for unhashable keys.
instancemethod union(second)
- Parameters
second:
Iterable[
TSource_co
]
- Returns
Produces the set union of two sequences: self + second.
- Example
>>> gen = (i for i in range(5)) >>> lst = [5, 3, 9, 7, 5, 9, 3, 7] >>> Enumerable(gen).union(lst).to_list() [0, 1, 2, 3, 4, 5, 9, 7]
- Revisions
v0.2.1: Added preliminary support for unhashable values.
instancemethod union_by(second, key_selector)
- Parameters
second:
Iterable[
TSource_co
]
key_selector:
Callable[[
TSource_co
], object]
- Returns
Produces the set union of two sequences: self + second according to a specified key selector.
- Example
>>> en = Enumerable([1, 9, -2, -7, 14]) >>> en.union_by([15, 2, -26, -7], abs).to_list() [1, 9, -2, -7, 14, 15, -26] # abs(-2) == abs(2)
- Revisions
v1.0.0: New.
instancemethod where(predicate)
- Parameters
predicate:
Callable[[
TSource_co
], bool]
- Returns
Filters the sequence of values based on a predicate.
- Example
>>> strs = ['apple', 'orange', 'Apple', 'xx', 'Grapes'] >>> Enumerable(strs).where(str.istitle).to_list() ['Apple', 'Grapes']
instancemethod where2(predicate)
- Parameters
predicate:
Callable[[
TSource_co
, int], bool]
- Returns
Filters the sequence of values based on a predicate. Each element’s index is used in the predicate logic.
- Example
>>> ints = [0, 30, 20, 15, 90, 85, 40, 75] >>> Enumerable(ints).where2(lambda e, i: e <= i * 10).to_list() [0, 20, 15, 40]
instancemethod zip[TOther](__second)
- Parameters
__second:
Iterable[
TOther
]
- Returns
Enumerable
[Tuple[
TSource_co
,
TOther
]]
Produces a sequence of 2-element tuples from the two sequences.
- Example
>>> ints = [1, 2, 3, 4] >>> dims = ['x', 'y', 'z', 't', 'u', 'v'] >>> Enumerable(ints).zip(dims).to_list() [(1, 'x'), (2, 'y'), (3, 'z'), (4, 't')]
instancemethod zip[TOther, TOther2](__second, __third)
- Parameters
__second:
Iterable[
TOther
]
__third:
Iterable[
TOther2
]
- Returns
Enumerable
[Tuple[
TSource_co
,
TOther
,
TOther2
]]
- Revisions
v0.1.1: New.
instancemethod zip[TOther, TOther2, TOther3](__second, __third, __fourth)
- Parameters
__second:
Iterable[
TOther
]
__third:
Iterable[
TOther2
]
__fourth:
Iterable[
TOther3
]
- Returns
Enumerable
[Tuple[
TSource_co
,
TOther
,
TOther2
,
TOther3
]]
- Revisions
v0.1.1: New.
instancemethod zip[TOther, TOther2, TOther3, TOther4](__second, __third, __fourth, __fifth)
- Parameters
__second:
Iterable[
TOther
]
__third:
Iterable[
TOther2
]
__fourth:
Iterable[
TOther3
]
__fifth:
Iterable[
TOther4
]
- Returns
Enumerable
[Tuple[
TSource_co
,
TOther
,
TOther2
,
TOther3
,
TOther4
]]
- Revisions
v0.1.1: New.
instancemethod zip(__second, __third, __fourth, __fifth, __sixth, *iters)
- Parameters
__second:
Iterable[Any]
__third:
Iterable[Any]
__fourth:
Iterable[Any]
__fifth:
Iterable[Any]
__sixth:
Iterable[Any]
*iters:
Iterable[Any]
- Returns
Enumerable
[Tuple[Any, ...]]
- Revisions
v0.1.1: New.
instancemethod zip2[TOther, TResult](__second, __result_selector)
- Parameters
__second:
Iterable[
TOther
]
__result_selector:
Callable[[
TSource_co
,
TOther
],
TResult
]
- Returns
Applies a specified function to the corresponding elements of two sequences, producing a sequence of the results.
- Example
>>> ints = [1, 2, 3, 4] >>> dims = ['x', 'y', 'z', 't', 'u', 'v'] >>> Enumerable(ints).zip2(dims, lambda i, d: f'{i}.{d}').to_list() ['1.x', '2.y', '3.z', '4.t']
instancemethod zip2[TOther, TOther2, TResult](__second, __third, __result_selector)
instancemethod zip2[TOther, TOther2, TOther3, TResult](__second, __third, __fourth, __result_selector)
instancemethod zip2[TOther, TOther2, TOther3, TOther4, TResult](__second, __third, __fourth, __fifth, __result_selector)
instancemethod zip2(__second, __third, __fourth, __fifth, __sixth, *iters_and_result_selector)
- Parameters
__second:
Iterable[Any]
__third:
Iterable[Any]
__fourth:
Iterable[Any]
__fifth:
Iterable[Any]
__sixth:
Iterable[Any]
*iters_and_result_selector:
Union[Iterable[Any], Callable[..., Any]]
- Returns
Enumerable
[Any]
- Revisions
v0.1.1: New.
instancemethod elements_in(__index)
- Parameters
__index:
slice
- Returns
Produces a subsequence defined by the given slice notation.
This method always uses a generic list slicing method regardless the implementation of the wrapped iterable.
This method currently is identical to take()
when it takes a slice.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100; yield 1000; yield 10000 >>> Enumerable(gen()).elements_in(slice(1, 3)).to_list() [10, 100]
instancemethod elements_in(__start, __stop, __step=1)
- Parameters
__start:
int
__stop:
int
__step:
int
- Returns
Produces a subsequence with indices that define a slice.
This method always uses a generic list slicing method regardless the implementation of the wrapped iterable.
- Example
>>> def gen(): ... yield 1; yield 10; yield 100; yield 1000; yield 10000 >>> Enumerable(gen()).elements_in(1, 3).to_list() [10, 100]
instancemethod to_tuple()
- Returns
Tuple[
TSource_co
, ...]
Enumerates all values and returns a tuple containing them.
- Revisions
v0.1.2: New.