"""
可迭代对象工具模块
"""
class IterableHelper:
@staticmethod
def find_all(func_condition,iterable):
"""
在可迭代对象中查找所有满足条件的元素 完成filter()高阶内置函数的功能
:param func_condition: 查找条件函数
:param iterable: 可迭代对象
:return: 生成器对象
"""
for item in iterable:
if func_condition(item):
yield item
@staticmethod
def get_max(iterable,func_condition):
"""
根据条件在可迭代对象中获取最大的元素 实现max()函数的功能
:param iterable: 可迭代对象
:param func_condition: 指定条件
:return: 最大的元素对象
"""
max_value = iterable[0]
for i in range(1,len(iterable)):
# if max_value.face_score < iterable[i].face_score
# lambda item: item.height
if func_condition(max_value) < func_condition(iterable[i]):
max_value = iterable[i]
return max_value
@staticmethod
def get_min(iterable,func_condition):
"""
根据条件在可迭代对象中获取最小的元素 实现min()函数的功能
:param iterable: 可迭代对象
:param func_condition: 指定条件
:return: 最小的元素对象
"""
min_value = iterable[0]
for i in range(1,len(iterable)):
# if min_value.face_score < iterable[i].face_score
# lambda item: item.height
if func_condition(min_value) > func_condition(iterable[i]):
min_value = iterable[i]
return min_value
@staticmethod
def first(iterable,func_condition):
"""
可迭代对象中符合条件的第一个元素
:param iterable: 可迭代对象
:param func_condition: 指定条件
:return: 第一个满足条件的元素对象
"""
for item in iterable:
if func_condition(item):
return item
@staticmethod
def get_count(iterable,func_condition):
"""
在可迭代对象中,获取满足条件的元素数量
:param iterable: 可迭代对象
:param func_condition: 条件
:return: 返回Int数量
"""
count = 0
for item in iterable:
if func_condition(item):
count += 1
return count
@staticmethod
def is_exists(iterable,func_condition):
"""
判断可迭代对象中是否存在某个条件的对象
:param iterable:
:param func_condition:
:return: True/False
"""
for item in iterable:
if func_condition(item):
return True
return False
@staticmethod
def sum(iterable,func_condition):
"""
根据指定逻辑叠加可迭代对象中的元素
:param iterable: 需要累加的数据
:param func_condition: 累加的逻辑
:return: 数值类型,累加结果
"""
sum_value = 0
for item in iterable:
sum_value += func_condition(item)
return sum_value
@staticmethod
def detele_all(iterable,func_condition):
"""
根据条件删除多个元素
:param iterable:
:param func_condition:
:return: 删除的元素数量
"""
count = 0
for item in range(len(iterable)-1,-1,-1): # 正向索引删除会导致后面元素索引报错
if func_condition(iterable[item]):
del iterable[item]
count += 1
return count
@staticmethod
def order_by(iterable,func_condition):
"""
根据条件升序排列
:param iterable:
:param func_condition: 比较条件
:return: 升序结果
"""
for i in range(len(iterable)-1):
for j in range(i+1,len(iterable)):
if func_condition(iterable[i])>func_condition(iterable[j]):
iterable[i], iterable[j] = iterable[j], iterable[i]
【python可迭代对象】使用类的静态方法实现自定义可迭代对象函数
于 2024-08-01 10:12:05 首次发布