在 python 2.4 中模拟 itertools.product 的 Pythonic 方法

发布于 2024-12-09 11:12:04 字数 216 浏览 0 评论 0原文

我有一个使用 itertools.product 的 python 3 脚本,但我需要能够在仅安装了 python 2.4 的计算机上运行它。由于 itertools.product 是 python 2.6 中的新增功能,因此我无法再访问此函数。

如何以Pythonic方式在Python 2.4中模拟itertools.product

I have a python 3 script that uses itertools.product, but I need to be able to run it on a machine that only has python 2.4 installed. Since itertools.product is new in python 2.6, I no longer have access to this function.

How can I emulate itertools.product in Python 2.4 in a pythonic way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

久隐师 2024-12-16 11:12:04

来自 http://docs.python.org/library/itertools.html# 的等效代码itertools.product

def product(*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 tuple(prod)

Equivalent code from http://docs.python.org/library/itertools.html#itertools.product

def product(*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 tuple(prod)
慢慢从新开始 2024-12-16 11:12:04

我不太熟悉 python 2.4,但是 根据 2.7 文档

这个函数等价于下面的代码,除了
实际实施并不会产生中间结果
内存:

def product(*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 tuple(prod)

I'm not too familiar with python 2.4, but per the 2.7 docs:

This function is equivalent to the following code, except that the
actual implementation does not build up intermediate results in
memory:

def product(*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 tuple(prod)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文