Added queries sum, skip & take
This commit is contained in:
66
src/cpl_query/_query/skip_take.py
Normal file
66
src/cpl_query/_query/skip_take.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from cpl_query.exceptions import ArgumentNoneException, ExceptionArgument, IndexOutOfRangeException
|
||||
from cpl_query.extension.iterable_abc import IterableABC
|
||||
|
||||
|
||||
def skip_query(_list: IterableABC, _index: int) -> IterableABC:
|
||||
if _list is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.list)
|
||||
|
||||
if _index is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.index)
|
||||
|
||||
if _index >= len(_list):
|
||||
raise IndexOutOfRangeException()
|
||||
|
||||
result = IterableABC()
|
||||
result.extend(_list[_index:])
|
||||
return result
|
||||
|
||||
|
||||
def skip_last_query(_list: IterableABC, _index: int) -> IterableABC:
|
||||
if _list is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.list)
|
||||
|
||||
if _index is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.index)
|
||||
|
||||
index = len(_list) - _index
|
||||
|
||||
if index >= len(_list) or index < 0:
|
||||
raise IndexOutOfRangeException()
|
||||
|
||||
result = IterableABC()
|
||||
result.extend(_list[:index])
|
||||
return result
|
||||
|
||||
|
||||
def take_query(_list: IterableABC, _index: int) -> IterableABC:
|
||||
if _list is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.list)
|
||||
|
||||
if _index is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.index)
|
||||
|
||||
if _index >= len(_list):
|
||||
raise IndexOutOfRangeException()
|
||||
|
||||
result = IterableABC()
|
||||
result.extend(_list[:_index])
|
||||
return result
|
||||
|
||||
|
||||
def take_last_query(_list: IterableABC, _index: int) -> IterableABC:
|
||||
if _list is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.list)
|
||||
|
||||
if _index is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.index)
|
||||
|
||||
index = len(_list) - _index
|
||||
|
||||
if index >= len(_list) or index < 0:
|
||||
raise IndexOutOfRangeException()
|
||||
|
||||
result = IterableABC()
|
||||
result.extend(_list[index:])
|
||||
return result
|
25
src/cpl_query/_query/sum.py
Normal file
25
src/cpl_query/_query/sum.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from collections import Callable
|
||||
from typing import Union
|
||||
|
||||
from cpl_query._helper import is_number
|
||||
from cpl_query.exceptions import ExceptionArgument, ArgumentNoneException, InvalidTypeException
|
||||
from cpl_query.extension.iterable_abc import IterableABC
|
||||
|
||||
|
||||
def sum_query(_list: IterableABC, _func: Callable) -> Union[int, float, complex]:
|
||||
if _list is None:
|
||||
raise ArgumentNoneException(ExceptionArgument.list)
|
||||
|
||||
if _func is None and not is_number(_list.type):
|
||||
raise InvalidTypeException()
|
||||
|
||||
result = 0
|
||||
for element in _list:
|
||||
if _func is not None:
|
||||
value = _func(element)
|
||||
else:
|
||||
value = element
|
||||
|
||||
result += value
|
||||
|
||||
return result
|
Reference in New Issue
Block a user