python中的置换,但只允许每个元素最多使用n次

2024-04-25 14:46:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个30个浮点数的数组,我需要取这个数组中4个浮点数的所有排列。你知道吗

显然这会产生大量的排列。我需要一个有效的方法来减少排列的数量。我相信一种方法可能是限制每个数字最多使用n次(比如8次)来进行排列。你知道吗

怎么做?我似乎找不到一种方法,在计算完完整的排列列表后,不使用循环过滤掉值,这太慢了。关于如何减少排列数量的任何其他建议都是非常受欢迎的,我使用的是python3。 非常感谢

我目前正在使用

value_array = np.random.rand(30,)
perm_array = permutations(value_array, 4)
perm_array = np.array(list(perm_array))
data = pd.DataFrame(perm_array, columns=["a", "b", "c", "d"])

一个简单的例子输出我想。。。 如果我有数字(1,2,3,4,5,6,7,8,9),我想要2的所有排列,但只允许一个元素被使用3次。。。你知道吗

我期望(1,2),(1,3),(1,4),(2,3),(2,4),(3,4),(5,6)。。。。 请注意,在1被使用了3次之后,它就不再使用了,然后2和3就不再使用了


Tags: 方法列表数量valuenp数字random数组
1条回答
网友
1楼 · 发布于 2024-04-25 14:46:48

因为熊猫是被标记的,所以这里有一种方法是使用itertools^{}和列表理解:

import pandas as pd
import itertools

n=3
[tuple(i) for i in pd.DataFrame(itertools.combinations(t,2),columns=['A','B'])
                          .groupby(['A'],as_index=False).head(n).values.tolist()]

输出:

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (3, 6), (4, 5),
     (4, 6), (4, 7), (5, 6), (5, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 8), (7, 9), (8, 9)]

相关问题 更多 >