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

python中的置换,但只允许每个元素最多使用n次,python,pandas,numpy,permutation,itertools,Python,Pandas,Numpy,Permutation,Itertools,我有一个30个浮点数的数组,我需要取这个数组中4个浮点数的所有排列 显然,这给出了相当多的排列。我需要一种有效的方法来减少排列的数量。我相信一种方法可能是限制每个数字只使用n次(比如8次)来进行排列 如何做到这一点?我似乎找不到一种方法,在计算完完整的排列列表后,不使用循环过滤掉值,这太慢了。任何关于如何减少排列数量的其他建议都是非常受欢迎的,我使用的是Python3。 多谢各位 我目前正在使用 value\u array=np.random.rand(30,) 排列数组=排列(值数组,4) p

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

显然,这给出了相当多的排列。我需要一种有效的方法来减少排列的数量。我相信一种方法可能是限制每个数字只使用n次(比如8次)来进行排列

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

我目前正在使用

value\u array=np.random.rand(30,)
排列数组=排列(值数组,4)
perm_数组=np.array(列表(perm_数组))
data=pd.DataFrame(perm_数组,列=[“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也不再使用,因为熊猫被标记,这里有一种方法使用
itertools
,并具有列表理解:

import pandas as pd
import itertools


输出:

[(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)]

你打算用这些排列做什么?我有两个数字列表,其中一个经过线性变换,然后我用几何散列来描述这四个向量。使用此代码,我希望将其与另一个列表中相同排列的几何散列相匹配。我正在关注这篇文章,并使用相同的方法解决一个稍微不同的问题,尝试在问题中添加所需的输出mmm,如果不键入许多示例,我会尝试……请注意,
t
是OP中的元组。此解决方案也使用组合
[(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)]