微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用规则迭代多维数组的 Python 库

如何解决使用规则迭代多维数组的 Python 库

python 中是否有一种方法可以有效地在多个维度上进行条件迭代?考虑以下用例:

for i in range(N):
    for j in range(i+1,N):
        for k in range(N):
            if (k != i) and (k != j):
                 print(i,j,k)

例如N = 4 这会产生

0 1 2
0 1 3
0 2 1
0 2 3
0 3 1
0 3 2
1 2 0
1 2 3
1 3 0
1 3 2
2 3 0
2 3 1

python 中是否有迭代器可以使用规则产生这个和类似的输出?我想象这样的事情

for i,k in fancy_iter(N=4,ndim=3,rules={'j > i','k != i','k != j'}):
    print(i,k)

编辑:预计迭代器不会过度浪费周期。循环遍历所有参数组合,然后排除那些不符合条件的组合,在更高维度上可能会变得非常慢。

解决方法

您可以使用 itertools.product 然后按您的所有条件进行过滤。

而且,虽然可能不如 dict 输入那么好,但您可以使用已定义或 lambda 函数并将其传入。

类似于:

from itertools import product


def fancy_iter(N,ndim,rules):
    ranges = [range(N)] * ndim
    for i,j,k in product(*ranges):
        if rules(i,k):
            yield i,k


def my_rules(i,k):
    return j > i and k != i and k != j


def main():
    for i,k in fancy_iter(4,3,my_rules):
        print(i,k)


if __name__ == '__main__':
    main()

输出:

0 1 2
0 1 3
0 2 1
0 2 3
0 3 1
0 3 2
1 2 0
1 2 3
1 3 0
1 3 2
2 3 0
2 3 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。