python – itertools.product – 返回列表而不是元组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – itertools.product – 返回列表而不是元组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1839字,纯文字阅读大概需要3分钟。
内容图文
我希望itertools.product返回一个列表而不是一个元组.我目前通过创建我自己的函数来做到这一点:
def product_list(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x + [y] for x in result for y in pool]
for prod in result:
yield list(prod) # Yields list() instead of tuple()
代码来自Python文档 – 我刚刚修改了最后一行.这很好,但似乎不是很聪明.
这样做的其他方法是什么?我正在考虑使用类似装饰器的东西或用我自己的生成器函数包装它.我对这两个概念都不太熟悉所以如果有人能给我看,我会很感激.
编辑
我正在做一些像这样凌乱的事情:
for r0 in product_list([0, 1], repeat=3):
r0.insert(0, 0)
for r1 in product_list([0, 1], repeat=3):
r1.insert(1, 0)
for r2 in product_list([0, 1], repeat=3):
r2.insert(2, 0)
for r3 in product_list([0, 1], repeat=3):
r3.insert(3, 0)
所以我希望我的函数返回一个列表,而不是每次都要抛出它. (我知道代码很乱,需要递归但我稍后会考虑这个.我更感兴趣的是学习如何做我上面描述的)
解决方法:
itertools.product是一个生成器,您可以轻松地将生成器链接在一起.这是一个生成器表达式,它将产品生成的每个元组更改为一个列表:
(list(tup) for tup in itertools.product(iterable1, iterable2, etc))
在您的示例代码中,您可以使用生成器表达式,或者您可以使用不同的方法在值的前面添加额外的值,同时将它们保留为元组:
for r0 in itertools.product([0, 1], repeat=3):
r0 = (0,) + r0 # keep r0 a tuple!
for r1 in itertools.product([0, 1], repeat=3):
r1 = (1,) + r1 # same here
# ...
由于您没有显示您正在使用的rN变量,因此无法为您提供最佳方法的明确答案. (这有点代码味道,你有编号变量.)的确,因为你的循环只是计算三个0或1位数,你可能能够通过一个产品调用,生成一个n的列表一次性使用不同的r值:
for bits in itertools.product([0, 1], repeat=3*n):
rs = [(i,) + bits[3*i:3*i+3] for i in range(n)]
# do something with the list of r tuples here
内容总结
以上是互联网集市为您收集整理的python – itertools.product – 返回列表而不是元组全部内容,希望文章能够帮你解决python – itertools.product – 返回列表而不是元组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。