首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据给定范围内的元素生成给定大小的列表来创建列表理解?

如何根据给定范围内的元素生成给定大小的列表来创建列表理解?
EN

Stack Overflow用户
提问于 2021-06-11 00:04:48
回答 2查看 116关注 0票数 0

给定两个参数:

  • dim一个sub-list
  • n的长度,值的范围,这个列表中的每个元素都可能采用

我希望生成一个列表列表,以便结果包含所有子列表的唯一组合(用于dimn)。

例如:

代码语言:javascript
复制
dim = 3
n = 2

我想要产生:

代码语言:javascript
复制
[
    [0, 0, 0],
    [0, 0, 1],
    [0, 1, 0],
    [0, 1, 1],
    [1, 0, 0],
    [1, 0, 1],
    [1, 1, 0],
    [1, 1, 1]
]

适用于:

代码语言:javascript
复制
dim = 2
n = 3

我想要产生:

代码语言:javascript
复制
[
    [0, 0],
    [0, 1],
    [0, 2],
    [1, 0],
    [1, 1],
    [1, 2],
    [2, 0],
    [2, 1],
    [2, 2]
]

我试过:

代码语言:javascript
复制
[[a,b] for a in range(dim) for b in range(n)]

但这并不完全正确。我已经在这周围挠了一段时间了。我只是不知道该怎么做。

注意,我认为理解列表是可行的方法。其他方法也是受欢迎的。但我认为理解列表是个好方法,因为我以后会增加更多的限制。喜欢

代码语言:javascript
复制
[[a,b] for a in range(dim) for b in range(n) if a!=b]

最后一个条件a!=b是一个非常简单的条件。实际上,如果a属于这个集合,b属于另一个集合和ab+4`,那么它们将更多地出现在表单上。

这段代码的目标是创建一个函数,它可以使用像吉他这样烦躁的乐器,接收琴弦的数量,它们的调音和和弦,然后它应该吐露出可能的指法。然而,我关心的是性能,因为我想处理至少六个字符串与12个不同的音符。但这是我以后会担心的问题。

所以完整的样本可能是这样的。tuning只是一个列表,其中的大小是字符串的数量,元素是调优的。chord是一种定义有效输出的结构。

代码语言:javascript
复制
>>> get_fingerings(tuning, chord)
[[6,6,4,3,0,0], [1,3,0,0,3]]
EN

回答 2

Stack Overflow用户

发布于 2021-06-11 00:54:22

您可以将列表理解与itertools.product一起用作元组和任何筛选器的生成器,以将它们包含或排除在最终列表中。例如:

代码语言:javascript
复制
[item for item 
    in itertools.product(range(5), range(5)) # generate
    if item[0] != item[1]]                   # filter in/out
票数 2
EN

Stack Overflow用户

发布于 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)]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67929776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档