微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何基于使用给定范围内的元素生成给定大小的列表来创建列表理解?

如何解决如何基于使用给定范围内的元素生成给定大小的列表来创建列表理解?

给定两个参数:

  • dim 子列表的长度
  • n 此列表的每个元素可能采用的值范围

我想生成一个列表列表,以便结果包含子列表的所有唯一组合(对于 dimn

例如:

dim = 3
n = 2

我要生成

[
    [0,0],[0,1],1,[1,1]
]

对于:

dim = 2
n = 3

我要生成

[
    [0,2],[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`”的形式上。

这段代码的目标是创建一个函数,它可以接收像吉他这样的有品乐器,接收弦的数量、它们的调音和一个和弦,然后它应该吐出可能的指法方式。但是,我担心性能,因为我想处理至少 6 个带有 12 个不同音符的弦。但这是一个我以后会担心的问题。

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

>>> get_fingerings(tuning,chord)
[[6,6,4,3,3]]

解决方法

您可以使用带有 itertools.product 的列表推导作为元组的生成器和任何过滤器以将它们包含或排除在最终列表中。例如:

[item for item 
    in itertools.product(range(5),range(5)) # generate
    if item[0] != item[1]]                   # filter in/out
,

如果条件只是a != b != ...,那么只需简单地使用itertools.permutations

[i for i in permutations(range(n),dim)]

喜欢: [i for i in permutations(range(2),2)] => [(0,1),(1,0)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?