python - 通过添加另一个列表的元素来生成列表的排列
问题描述
我尝试编写一个 Python 代码,它结合了两个不同的列表 C 和 C',以生成可能的排列。我们有一些概念,我在下面列举它们: 1) F 是一个包含模式的列表(我将在示例中显示模式)。2) N 是每个生成的序列中的元素数 3) H 是要从 C' 添加到 C 以生成序列的元素数。
例如,
C=[6,6,5,4,3,2,1]
C'=[1',2',4']
H=3
F=[6,4,5,2,1,3]
N=10
在这个例子中,我们希望通过将 C' 的三个元素添加到 C 来获得长度为 10 的序列。注意,这三个元素也可能是重复元素,例如 [1,2,1]。另一方面,生成的序列应该满足F。F中有一个模式。模式是指F的第一个元素F[0],6应该出现在第二个元素F[1]之前F,4,在生成的序列中。有了这个,我们可以使用一些规则来减少我们需要生成的序列数量。例如,我们只能在第一个位置接受 6,否则生成的序列不满足 F。我们可以在第二个位置接受数字 6 和 4,依此类推。最后,需要保留每个元素在 C 中出现的次数。例如,生成的序列应至少包含两个数字 6、一个数字 5、4、3、2、1。
为了清楚起见,我在下面的示例中解释了所有内容:
通过组合 C 和 C' 可能生成的序列是 [6,4',6,5,2',4,1',3,2,1] 其中 C' 的三个元素,[4',2',1 '],添加到C。生成的序列如何满足F?如果从左边开始遍历元素并忽略重复的元素,那么我们将有[6,4,5,2,1,3],它等于F(它满足F)。此外,在这个例子中,我们至少有两个数字 6,一个数字 5、4、3、2、1。正如我所提到的,应该保留 C 中的元素数量。例如,我无法生成像 [6,4',5,2',4,1',3,2,1,1'] 这样的序列。实际上,该序列满足 F。
呈现的代码没有考虑 C' 和 H 来生成排列。我的代码通过使用 itertools.product(C, repeat=N) 重复 C 的每个可能元素(不组合 C 和 C')来随机生成排列。生成的序列长度为10,满足F。缺少的是1)考虑C'和H来生成序列2)保留C的规则(需要保留每个元素在C中出现的次数.)
import itertools
from collections import deque
import collections
from itertools import product
def Generate_F_From_Lists(constrain):
F_list=[]
for u in constrain:
if u in F_list:
pass
else:
F_list.append(u)
return F_list
C= [6,6,5,4,3,2,1]
N=10
Satisfied_sequences=[]
F = [6,4,5,2,1,3]
# generate the permutation sequences of size N
for p in itertools.product(C, repeat=N):
# rules to reduce the number of generated permutation( for example in the first position only 6 is acceptable).
for constrain in product([6] , [6],[5, 6] ,[4, 5, 6], [3, 4, 5, 6] , [2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]):
Generated_F=Generate_F_From_Lists(constrain)
if Generated_F==F:
Satisfied_sequences.append(constrain)
先感谢您
解决方案
推荐阅读
- javascript - 如果从 API 获取数据时出错,React 重试
- python - 为什么 [x] * n 在 Python 中比 [x for _ in range(n)] 使用更少的内存?
- ios - 在 SwiftUI 中应用cornerRadius 或clipShape 时,iOS Widget 崩溃
- spring-boot - 如何检查springboot JPA的表中是否已经存在记录?
- javascript - 在同一元素上的 addEventListener() 之后添加 jQuery .click()
- excel - 根据多列条件将单元格从一个工作表复制到另一个工作表
- html - HTML/CSS - 将多个文本元素连接在一起
- apache - 如何重写 url 以使用 Apache 附加标头
- python-3.x - python 3 pandas数据帧的迭代以外的条件和技术
- java - 我们可以跳过 Java8 Streams