gpt4 book ai didi

python - python 中的排列但只允许每个元素最多使用 n 次

转载 作者:行者123 更新时间:2023-12-01 07:33:03 25 4
gpt4 key购买 nike

我有一个包含 30 个 float 的数组,我需要对该数组中 4 个 float 进行所有排列。

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

这将如何完成?我似乎无法找到一种在计算完整的排列列表后不使用循环来过滤值的方法,这太慢了。关于如何减少排列数量的任何其他建议将非常受欢迎,我正在使用 python 3。非常感谢

我目前正在使用创建排列

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 也一样

最佳答案

由于 pandas 已被标记,因此这是使用 itertoolsgroupby.head() 的一种方法使用列表理解:

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

关于python - python 中的排列但只允许每个元素最多使用 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com