Python cytoolz

数据转换和处理

from cytoolz import itertoolz

# 使用accumulate累积运算
nums = [1, 2, 3, 4]
cumulative_sums = itertoolz.accumulate(nums)
print(list(cumulative_sums))  # 输出 [1, 3, 6, 10]

# 使用sliding_window创建滑动窗口
windows = itertoolz.sliding_window(2, nums)

groupby和frequencies

from cytoolz import itertoolz

# 使用groupby进行数据分组
data = ['apple', 'pear', 'orange', 'banana']
grouped = itertoolz.groupby(len, data)
print(grouped)  # 输出 {5: ['apple'], 4: ['pear'], 6: ['orange', 'banana']}

# 使用frequencies统计元素频率
freq = itertoolz.frequencies(data)
print(freq)  # 输出 {'apple': 1, 'pear': 1, 'orange': 1, 'banana': 1}

流水线

from cytoolz.curried import map, filter

# 创建一个数据流水线,先过滤,后映射
data = [1, 2, 3, 4, 5]
pipeline = pipe(data,
                filter(lambda x: x > 2),  # 过滤大于2的元素
                map(lambda x: x ** 2),    # 将元素平方
                list)                     # 转换成列表
print(pipeline)  # 输出 [9, 16, 25]

延迟计算 异常处理

from cytoolz import map, filter, excepts

# 安全地处理可能出错的数据
def safe_divide(num):
    return 10 / num

# 使用excepts避免除零错误
safe_divide = excepts(ZeroDivisionError, safe_divide, lambda e: float('inf'))

data = [2, 1, 0, 5]
results = map(safe_divide, data)
print(list(results))  # 输出 [5.0, 10.0, inf, 2.0]
posted @ 2024-12-09 09:18  vx_guanchaoguo0  阅读(5)  评论(0编辑  收藏  举报