Python Cookbook学习记录

本文深入探讨了Python中迭代器和生成器的高效使用方法,包括全排列、组合、索引值迭代、多序列同步迭代、扁平化嵌套序列等高级技巧,适合希望提升编程效率的Python开发者。

4.迭代器和生成器
4.9迭代所有可能的组合和排列

import itertools

items = ['a', 'b', 'c']
#permutations()接受一个元素集合,将其中的元素重排列为所有可能的情况,
#并以元组形式返回
for p in itertools.permutations(items):
    print(p)

#得到较短长度的全排列,提供一个可选的长度参数
for p in itertools.permutations(items, 2):
    print(p)

#产生组合, 选择过的元素将从可能的候选元素中移除,即元素不会重复出现
for c in itertools.combinations(items, 3):
    print(c)

for c in itertools.combinations(items, 2):
    print(c)

for c in itertools.combinations(items, 1):
    print(c)

#允许相同的元素得到多次选择
for c in itertools.combinations_with_replacement(items, 3):
    print(c)

4.10以索引-值对的形式迭代序列

'''
迭代一个序列同时记录下序列当前处理的元素索引
enumerate()返回enumerate对象实例,是一个迭代器,返回连续的元组,
元祖由索引和next(iterator)返回的值组成
'''
my_list = ['a', 'b', 'c', 'd']
for x in enumerate(my_list):
    print(x)

#传入start参数作为起始索引
for x in enumerate(my_list, 1):
    print(x)#(1, 'a')开始

data = [(1, 2), (3, 4), (5, 6), (7, 8)]
#Error enumerate实例一次返回两个值,只能由两个变量接受分解结果
#for n, x, y in enumerate(data, 1):
    #print(n, x, y)

for n, (x, y) in enumerate(data, 1):
    print(n, x, y, sep=" ")

4.11同时迭代多个元素

xpts = [1, 5, 4, 2, 10, 7]
ypts = [101, 78, 37, 15, 62, 99]

for x, y in zip(xpts, ypts):
    print(x, y)

#zip()创建出一个迭代器,该迭代器可产生元组。整个迭代的长度和其中最短的输入序列长度相同

a = [1, 2, 3]
b = ['w', 'x', 'y', 'z']
for i in zip(a, b):
    print(i)

#想以长序列为主
from itertools import zip_longest

for i in zip_longest(a, b):
    print(i)

#选择填充元素
for i in zip_longest(a, b, fillvalue=0):
    print(i)

#创建字典
print(dict(zip(xpts, ypts)))
print(dict(zip_longest(a, b)))

l = [1, 2, 3]
m = [10, 11]
n = ['x', 'y', 'z']
#迭代多个序列
for i in zip(l, m, n):
    print(i)

4.12在不同的容器中进行迭代

'''
对许多对象执行相同操作,但这些对象在不同的容器中
'''

from itertools import chain

a = [1, 2, 3, 4]
b = ['x', 'y', 'z']
#chain接受多个序列参数, 不考虑序列类型, 返回迭代器对象
for x in chain(a, b):
    print(x)

4.13略
4.14扁平化处理嵌套型序列

from collections import Iterable

def flatten(items, ignore_types=(str, bytes)):
    for item in items:
        if isinstance(item, Iterable) and not isinstance(item, ignore_types):
            yield from flatten(item)
            #相当于
            #for x in flatten(item):
                #yield x

        else:
            yield item

items = [1, 2, [3, 4, [5, 6], 7], 8]
for x in flatten(items):
    print(x)

4.15合并多个序列,在对整个序列进行迭代

import heapq
a = [1, 4, 7, 10]
b = [2, 5, 6, 11]
#heapq.merge()要求所有输入序列都是有序的。它不会将所有数据读取到堆中
#或预先做任何的排序操作,它只检查每个输入序列的第一个元素,将最小的发出去
#再从之前选择的序列读取一个新的元素,再重复执行这个步骤,直到所有序列耗尽
for c in heapq.merge(a, b):
    print(c)

4.16用迭代器取代while循环

CHUNKSIZE = 8192

def reader(s):
    while True:
        data = s.recv(CHUNKSIZE)
        if data == b'':
            break
        #process_data(data)

def reader(s):
    for chunk in iter(lambda :s.recv(CHUNKSIZE), b''):
        #process_data(chunk)
        pass

#iter()可以选择性的接受一个无参的可调用对象以及一个哨兵(结束)值作为输入
#iter()会创建一个迭代器,然后重复调用用户提供的可调用对象,直到它返回哨兵值
MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值