首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numba保存重复排列

Numba保存重复排列
EN

Stack Overflow用户
提问于 2022-10-17 13:03:42
回答 1查看 46关注 0票数 0

我有一个经常被调用的函数,所以为了加快速度,我想使用@njit装饰器。但是,在这个函数中,我需要计算数组的排列,numba不适合迭代工具。

我为numba找到了来生成排列,但是这个实现并没有以我需要的方式处理输入中的重复项。

代码语言:javascript
复制
array1 = [9,9,21]
def permutations(A, k):
    r = [[i for i in range(0)]]
    for i in range(k):
        r = [[a] + b for a in A for b in r if (a in b)==False]
    return r
print(permutations(array1,3))
print(list(itertools.permutations(array1,3)))

[]
[(9, 9, 21), (9, 21, 9), (9, 9, 21), (9, 21, 9), (21, 9, 9), (21, 9, 9)]

我想要的是第二个结果,而不是第一个

EN

回答 1

Stack Overflow用户

发布于 2022-10-17 17:39:23

我已经创建了您的“理想世界”排列函数,它递归地发送原始列表中的一个排列,但缺少一个成员。但是,不要期望像迭代工具中那样快速的结果。

代码语言:javascript
复制
array1 = [9, 9, 21]
array2 = [1, 2, 3]
array3 = [1, 2, 3, 4]


def permutations(A):

    r = []
    for i in range(len(A)):
        a, b = A[i], A[: i] + A[i + 1:]
        if b:
            for c in permutations(b):
                if [a] + c in r:
                    continue
                r.append([a] + c)
        else:
            r.append([a])
    return r


print(permutations(array1))
print(permutations(array2))
print(permutations(array3))

输出:

代码语言:javascript
复制
[[9, 9, 21], [9, 21, 9], [21, 9, 9]]
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
[[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2], 
 [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1], 
 [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1], 
 [4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74097755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档