给定两个参数:
dim一个sub-listn的长度,值的范围,这个列表中的每个元素都可能采用我希望生成一个列表列表,以便结果包含所有子列表的唯一组合(用于dim和n)。
例如:
dim = 3
n = 2我想要产生:
[
[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]
]适用于:
dim = 2
n = 3我想要产生:
[
[0, 0],
[0, 1],
[0, 2],
[1, 0],
[1, 1],
[1, 2],
[2, 0],
[2, 1],
[2, 2]
]我试过:
[[a,b] for a in range(dim) for b in range(n)]但这并不完全正确。我已经在这周围挠了一段时间了。我只是不知道该怎么做。
注意,我认为理解列表是可行的方法。其他方法也是受欢迎的。但我认为理解列表是个好方法,因为我以后会增加更多的限制。喜欢
[[a,b] for a in range(dim) for b in range(n) if a!=b]最后一个条件a!=b是一个非常简单的条件。实际上,如果a属于这个集合,b属于另一个集合和ab+4`,那么它们将更多地出现在表单上。
这段代码的目标是创建一个函数,它可以使用像吉他这样烦躁的乐器,接收琴弦的数量,它们的调音和和弦,然后它应该吐露出可能的指法。然而,我关心的是性能,因为我想处理至少六个字符串与12个不同的音符。但这是我以后会担心的问题。
所以完整的样本可能是这样的。tuning只是一个列表,其中的大小是字符串的数量,元素是调优的。chord是一种定义有效输出的结构。
>>> get_fingerings(tuning, chord)
[[6,6,4,3,0,0], [1,3,0,0,3]]发布于 2021-06-11 00:54:22
您可以将列表理解与itertools.product一起用作元组和任何筛选器的生成器,以将它们包含或排除在最终列表中。例如:
[item for item
in itertools.product(range(5), range(5)) # generate
if item[0] != item[1]] # filter in/out发布于 2021-06-11 00:56:47
如果条件只是a != b != ...,那么只需使用itertools.permutations
[i for i in permutations(range(n), dim)]
喜欢:[i for i in permutations(range(2), 2)] => [(0, 1), (1, 0)]
https://stackoverflow.com/questions/67929776
复制相似问题