如何解决使用规则迭代多维数组的 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 举报,一经查实,本站将立刻删除。