chain()函数

定义:

chain函数是Python的itertools模块中的一个函数,它用于将多个可迭代对象(如列表、元组等)连接在一起,形成一个新的可迭代对象。这个新的可迭代对象可以逐个访问原始可迭代对象中的元素。

示例一

from itertools import chain
 
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [4, 5, 6]
 
# 使用chain函数将三个列表连接在一起
result = list(chain(list1, list2, list3))
print(result)  # 输出:[1, 2, 3, 'a', 'b', 'c', 4, 5, 6]

示例二

from itertools import chain 
# some consonants 
consonants =['d', 'f', 'k', 'l', 'n', 'p'] 
# some vowels 
vowels =['a', 'e', 'i', 'o', 'u'] 
# resultatnt list 
res = list(chain(consonants, vowels)) 
# sorting the list 
res.sort() 
print(res)

输出

chain.from_iterable()函数

用于从单个可迭代项中链接项目,也就是说只能传入一个可迭代对象,并且迭代更彻底。

from itertools import chain 
  
li =['ABC', 'DEF', 'GHI', 'JKL'] 
# using chain-single iterable. 
res1 = list(chain(li)) 
res2 = list(chain.from_iterable(li)) 
  
print("using chain:", res1) 
print("using chain.from_iterable:", res2)

using chain: [‘ABC’, ‘DEF’, ‘GHI’, ‘JKL’]
using chain.from_iterable: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’]

使用 chain() 的一个常见场景是当你想对不同的集合中所有元素一起执行某些操作的时候

比如:此时我想用优化器同时将多个生成器(genA2B, genB2A)同时优化,多个鉴别器(disGA, disGB, disLA, disLB)同时优化

# 优化器
gen_params = itertools.chain(self.genA2B.parameters(), self.genB2A.parameters())
self.G_optim = torch.optim.Adam(gen_params, lr=self.args.lr, betas=(0.5, 0.999), weight_decay=self.args.weight_decay)
disc_params = itertools.chain(self.disGA.parameters(), self.disGB.parameters(), self.disLA.parameters(), self.disLB.parameters())
self.D_optim = torch.optim.Adam(disc_params, lr=self.args.lr, betas=(0.5, 0.999), weight_decay=self.args.weight_decay)
#itertools.chain()接受一个或多个可迭代对象作为输入参数。然后创建一个迭代器,一次连续的返回每个
#可迭代对象中的元素。这种方式要比先将序列合并再迭代要高效
for x in a+b:   #这个是先合并再遍历,不够高效
    pass
for x in chain(a,b):   #better,更省内存
    pass
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值