python 中枚举所有组合和 return 索引的最快方法
fastest way in python to enumerate all combinations and return the index
很难在标题中描述我的问题。我觉得这个问题的标题不是很好。我的问题如下
假设我有一个列表 [0,0,0,0,0],我想将 3 个放入列表中的这 5 个位置。我想列举所有可能的组合。在这种情况下,将是5选择3,即10,例如
[1,1,1,0,0]
[1,0,1,0,1]
....
我最终希望得到一个列表列表,这样大列表中的每个元素(仍然是一个列表)在每个场景中存储这些元素的索引,例如,在上面的示例中,第一个最终大列表中的元素应为 [0,1,2],最终大列表中的第 2 个元素应为 [0,2,4]...
有没有快速实现的方法?我想我需要使用库 itertools,但不确定我应该使用哪个特定函数
获取所有可能的长度为 5 的二进制列表,其中有 3 个一
N = 5
zeros = [0]*N
for comb in itertools.combinations(range(N), r = 3):
l = zeros.copy()
for indice in comb:
l[indice] = 1
效率不是很高,但应该足够快。
要获取索引的 "big list",请使用 itertools.combinations(range(5), 3))
这是您要找的吗?
from itertools import combinations
num_ones = 3
slots = 5
comb_indices = list(combinations(range(5),3))
print comb_indices
[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 3), (0, 2, 4), (0, 3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
很难在标题中描述我的问题。我觉得这个问题的标题不是很好。我的问题如下
假设我有一个列表 [0,0,0,0,0],我想将 3 个放入列表中的这 5 个位置。我想列举所有可能的组合。在这种情况下,将是5选择3,即10,例如
[1,1,1,0,0]
[1,0,1,0,1]
....
我最终希望得到一个列表列表,这样大列表中的每个元素(仍然是一个列表)在每个场景中存储这些元素的索引,例如,在上面的示例中,第一个最终大列表中的元素应为 [0,1,2],最终大列表中的第 2 个元素应为 [0,2,4]...
有没有快速实现的方法?我想我需要使用库 itertools,但不确定我应该使用哪个特定函数
获取所有可能的长度为 5 的二进制列表,其中有 3 个一
N = 5
zeros = [0]*N
for comb in itertools.combinations(range(N), r = 3):
l = zeros.copy()
for indice in comb:
l[indice] = 1
效率不是很高,但应该足够快。
要获取索引的 "big list",请使用 itertools.combinations(range(5), 3))
这是您要找的吗?
from itertools import combinations
num_ones = 3
slots = 5
comb_indices = list(combinations(range(5),3))
print comb_indices
[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 3), (0, 2, 4), (0, 3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]