Module osbot_utils.utils.Lists
Expand source code
import sys
from typing import List
from osbot_utils.utils.Misc import list_set
from osbot_utils.utils.Str import trim
def len_list(target):
if type(target) is list:
return len(list(target))
return 0
def list_add(array : list, value):
if value is not None:
array.append(value)
return value
def list_chunks(items:list, split: int):
if items and split and split > 0:
for i in range(0, len(items), split):
yield items[i:i + split]
def list_contains_list(array : list, values):
if array is not None:
if type(values) is list:
for item in values:
if (item in array) is False:
return False
return True
return False
def list_delete(target, item):
if item in target:
target.remove(item)
return target
def list_empty(list):
return not list_not_empty(list)
def list_filter(target_list, filter_function):
return list(filter(filter_function, target_list))
def list_filter_starts_with(target_list, prefix):
return list_filter(target_list, lambda x: x.startswith(prefix))
def list_filter_contains(target_list, value):
return list_filter(target_list, lambda x: x.find(value) > -1)
def list_find(array:list, item):
if item in array:
return array.index(item)
return -1
def list_first(list, strip=False):
if list_not_empty(list):
value = list[0]
if strip:
value = value.strip()
return value
def list_in_list(source : list, target: list):
return set(source).issubset(set(target))
def list_get(array, position=None, default=None):
if type(array) is list:
if type(position) is int and position >=0 :
if len(array) > position:
return array[position]
return default
def list_get_field(values, field):
if type(values) is list:
return [item.get(field) for item in values]
return []
def list_group_by(values, group_by):
results = {}
if type(values) is list:
for item in values:
value = str(item.get(group_by))
if results.get(value) is None: results[value] = []
results[value].append(item)
return results
def list_index_by(values, index_by):
from osbot_utils.fluent.Fluent_Dict import Fluent_Dict
results = {}
if values and index_by:
for item in values:
results[item.get(index_by)] = item
return Fluent_Dict(results)
def list_lower(input_list):
return [item.lower() for item in input_list]
def list_not_empty(list):
if list and type(list).__name__ == 'list' and len(list) >0:
return True
return False
def list_order_by(target: List[dict], key: str, reverse: bool=False) -> List[dict]:
if target and key:
return sorted(target, key=lambda x: x[key], reverse=reverse)
return []
def list_pop(array:list, position=None, default=None):
if array:
if len(array) >0:
if type(position) is int:
if len(array) > position:
return array.pop(position)
else:
return array.pop()
return default
def list_pop_and_trim(array, position=None):
value = array_pop(array,position)
if type(value) is str:
return trim(value)
return value
def list_remove(array, item):
if type(array) is list:
if type(item) is list:
result = []
for element in array:
if element not in item:
result.append(element)
return result
return [element for element in array if element != item]
return array
def list_remove_list(source: list, target: list):
if type(source) is list and type(target) is list:
for item in target:
if item in source:
source.remove(item)
return source
def list_remove_empty(array):
if type(array) is list:
return [element for element in array if element]
return array
def list_set_dict(target):
if hasattr(target, '__dict__'):
return sorted(list(set(target.__dict__)))
return []
def list_sorted(target_list, key, descending=False):
return list(sorted(target_list, key= lambda x:x.get(key,None) ,reverse=descending))
def list_stats(target):
stats = {}
if type(target) is list:
for item in target:
if stats.get(item) is None:
stats[item] = 0
stats[item] += 1
return stats
def list_to_tuple(target: list):
if type(target) is list:
return tuple(target)
def list_zip(*args):
if args:
return list(zip(*args))
def sys_path_python(python_folder='lib/python'):
return list_contains(sys.path, python_folder)
def tuple_to_list(target:tuple):
if type(target) is tuple:
return list(target)
def tuple_replace_position(target:tuple, position,value):
tuple_as_list = tuple_to_list(target)
if len(tuple_as_list) > position:
tuple_as_list[position] = value
list_as_tuple = list_to_tuple(tuple_as_list)
return list_as_tuple
def unique(target):
return list_set(target)
array_find = list_find
array_get = list_get
array_pop = list_pop
array_pop_and_trim = list_pop_and_trim
array_add = list_add
list_contains = list_filter_contains
list_del = list_delete
list_sort_by = list_sorted
chunks = list_chunks
Functions
def array_add(array: list, value)
-
Expand source code
def list_add(array : list, value): if value is not None: array.append(value) return value
def array_find(array: list, item)
-
Expand source code
def list_find(array:list, item): if item in array: return array.index(item) return -1
def array_get(array, position=None, default=None)
-
Expand source code
def list_get(array, position=None, default=None): if type(array) is list: if type(position) is int and position >=0 : if len(array) > position: return array[position] return default
def array_pop(array: list, position=None, default=None)
-
Expand source code
def list_pop(array:list, position=None, default=None): if array: if len(array) >0: if type(position) is int: if len(array) > position: return array.pop(position) else: return array.pop() return default
def array_pop_and_trim(array, position=None)
-
Expand source code
def list_pop_and_trim(array, position=None): value = array_pop(array,position) if type(value) is str: return trim(value) return value
def chunks(items: list, split: int)
-
Expand source code
def list_chunks(items:list, split: int): if items and split and split > 0: for i in range(0, len(items), split): yield items[i:i + split]
def len_list(target)
-
Expand source code
def len_list(target): if type(target) is list: return len(list(target)) return 0
def list_add(array: list, value)
-
Expand source code
def list_add(array : list, value): if value is not None: array.append(value) return value
def list_chunks(items: list, split: int)
-
Expand source code
def list_chunks(items:list, split: int): if items and split and split > 0: for i in range(0, len(items), split): yield items[i:i + split]
def list_contains(target_list, value)
-
Expand source code
def list_filter_contains(target_list, value): return list_filter(target_list, lambda x: x.find(value) > -1)
def list_contains_list(array: list, values)
-
Expand source code
def list_contains_list(array : list, values): if array is not None: if type(values) is list: for item in values: if (item in array) is False: return False return True return False
def list_del(target, item)
-
Expand source code
def list_delete(target, item): if item in target: target.remove(item) return target
def list_delete(target, item)
-
Expand source code
def list_delete(target, item): if item in target: target.remove(item) return target
def list_empty(list)
-
Expand source code
def list_empty(list): return not list_not_empty(list)
def list_filter(target_list, filter_function)
-
Expand source code
def list_filter(target_list, filter_function): return list(filter(filter_function, target_list))
def list_filter_contains(target_list, value)
-
Expand source code
def list_filter_contains(target_list, value): return list_filter(target_list, lambda x: x.find(value) > -1)
def list_filter_starts_with(target_list, prefix)
-
Expand source code
def list_filter_starts_with(target_list, prefix): return list_filter(target_list, lambda x: x.startswith(prefix))
def list_find(array: list, item)
-
Expand source code
def list_find(array:list, item): if item in array: return array.index(item) return -1
def list_first(list, strip=False)
-
Expand source code
def list_first(list, strip=False): if list_not_empty(list): value = list[0] if strip: value = value.strip() return value
def list_get(array, position=None, default=None)
-
Expand source code
def list_get(array, position=None, default=None): if type(array) is list: if type(position) is int and position >=0 : if len(array) > position: return array[position] return default
def list_get_field(values, field)
-
Expand source code
def list_get_field(values, field): if type(values) is list: return [item.get(field) for item in values] return []
def list_group_by(values, group_by)
-
Expand source code
def list_group_by(values, group_by): results = {} if type(values) is list: for item in values: value = str(item.get(group_by)) if results.get(value) is None: results[value] = [] results[value].append(item) return results
def list_in_list(source: list, target: list)
-
Expand source code
def list_in_list(source : list, target: list): return set(source).issubset(set(target))
def list_index_by(values, index_by)
-
Expand source code
def list_index_by(values, index_by): from osbot_utils.fluent.Fluent_Dict import Fluent_Dict results = {} if values and index_by: for item in values: results[item.get(index_by)] = item return Fluent_Dict(results)
def list_lower(input_list)
-
Expand source code
def list_lower(input_list): return [item.lower() for item in input_list]
def list_not_empty(list)
-
Expand source code
def list_not_empty(list): if list and type(list).__name__ == 'list' and len(list) >0: return True return False
def list_order_by(target: List[dict], key: str, reverse: bool = False) ‑> List[dict]
-
Expand source code
def list_order_by(target: List[dict], key: str, reverse: bool=False) -> List[dict]: if target and key: return sorted(target, key=lambda x: x[key], reverse=reverse) return []
def list_pop(array: list, position=None, default=None)
-
Expand source code
def list_pop(array:list, position=None, default=None): if array: if len(array) >0: if type(position) is int: if len(array) > position: return array.pop(position) else: return array.pop() return default
def list_pop_and_trim(array, position=None)
-
Expand source code
def list_pop_and_trim(array, position=None): value = array_pop(array,position) if type(value) is str: return trim(value) return value
def list_remove(array, item)
-
Expand source code
def list_remove(array, item): if type(array) is list: if type(item) is list: result = [] for element in array: if element not in item: result.append(element) return result return [element for element in array if element != item] return array
def list_remove_empty(array)
-
Expand source code
def list_remove_empty(array): if type(array) is list: return [element for element in array if element] return array
def list_remove_list(source: list, target: list)
-
Expand source code
def list_remove_list(source: list, target: list): if type(source) is list and type(target) is list: for item in target: if item in source: source.remove(item) return source
def list_set_dict(target)
-
Expand source code
def list_set_dict(target): if hasattr(target, '__dict__'): return sorted(list(set(target.__dict__))) return []
def list_sort_by(target_list, key, descending=False)
-
Expand source code
def list_sorted(target_list, key, descending=False): return list(sorted(target_list, key= lambda x:x.get(key,None) ,reverse=descending))
def list_sorted(target_list, key, descending=False)
-
Expand source code
def list_sorted(target_list, key, descending=False): return list(sorted(target_list, key= lambda x:x.get(key,None) ,reverse=descending))
def list_stats(target)
-
Expand source code
def list_stats(target): stats = {} if type(target) is list: for item in target: if stats.get(item) is None: stats[item] = 0 stats[item] += 1 return stats
def list_to_tuple(target: list)
-
Expand source code
def list_to_tuple(target: list): if type(target) is list: return tuple(target)
def list_zip(*args)
-
Expand source code
def list_zip(*args): if args: return list(zip(*args))
def sys_path_python(python_folder='lib/python')
-
Expand source code
def sys_path_python(python_folder='lib/python'): return list_contains(sys.path, python_folder)
def tuple_replace_position(target: tuple, position, value)
-
Expand source code
def tuple_replace_position(target:tuple, position,value): tuple_as_list = tuple_to_list(target) if len(tuple_as_list) > position: tuple_as_list[position] = value list_as_tuple = list_to_tuple(tuple_as_list) return list_as_tuple
def tuple_to_list(target: tuple)
-
Expand source code
def tuple_to_list(target:tuple): if type(target) is tuple: return list(target)
def unique(target)
-
Expand source code
def unique(target): return list_set(target)