【发布时间】:2021-08-18 07:44:34
【问题描述】:
我想创建一个列表,其中包含满足特定条件的各种元素组合的每个排列。具体来说,我希望给定长度的每个列表都包含大部分零和一个或两个不同的元素,其中任何一个都可以是 1 或 -1。我写了以下内容,虽然有效,但速度很慢:
import itertools
slots = 12
all_choices = []
for elements in itertools.product(*[[-1,0,1] for ii in range(slots)]):
if sum([abs(ii) for ii in elements]) in [1, 2]:
all_choices.append(list(elements))
我设法使它更快一点:
slots = 12
all_choices = []
for first in [-1, 1]:
for second in [-1, 1]:
for ii in range(slots):
for jj in range(ii, slots):
choices = [0 for kk in range(slots)]
choices[ii] = first
choices[jj] = second
if choices not in all_choices:
all_choices.append(choices)
但这仍然感觉很笨拙,我相信有一种更有效/更清洁的方法可以利用itertools 来获得我想要的东西。有更好的方法吗?
【问题讨论】:
标签: python python-2.7 combinations permutation itertools