python - python - 如何定义一个创建与python相互嵌入的for循环的函数?
问题描述
我正在使用 python3 编程。我一直在寻找一个程序,它可以生成 16 个和弦(用于作曲)的每种组合,可以在 C 和弦或 G 和弦之间进行选择。我成功地使用了这段代码:
chords = ['C', 'G']
progressions = []
for chord1 in chords:
for chord2 in chords:
for chord3 in chords:
for chord4 in chords:
for chord5 in chords:
for chord6 in chords:
for chord7 in chords:
for chord8 in chords:
for chord9 in chords:
for chord10 in chords:
for chord11 in chords:
for chord12 in chords:
for chord13 in chords:
for chord14 in chords:
for chord15 in chords:
for chord16 in chords:
progressions.append([chord1, chord2, chord3, chord4,
chord5, chord6, chord7, chord8,
chord9, chord10, chord11, chord12,
chord13, chord14, chord15, chord16]
)
print(progressions)
print(f'{len(progressions)} progressions generated.')
这是我得到的输出(这是我需要的确切输出):[ ... ['G','G','G','G','G','G','G' , 'G', 'G', 'G', 'G', 'G', 'C', 'G', 'G', 'G'], ['G', 'G', 'G' ,'G','G','G','G','G','G','G','G','G','G','C','C',' C'],['G','G','G','G','G','G','G','G','G','G','G',' G','G','C','C','G'],['G','G','G','G','G','G','G',' G','G','G','G','G','G','C','G','C'],['G','G','G','G','G','G','G',' G','G','G','G','G','G','C','G','G'],['G','G','G',' G','G','G','G','G','G','G','G','G','G','G','C','C' ],['G','G','G','G','G','G','G','G','G','G','G','G' , 'G', 'G', 'C', 'G'], ['G', 'G', 'G', 'G', 'G', 'G', 'G', 'G' , 'G', 'G', 'G', 'G', 'G','G','G','C'],['G','G','G','G','G','G','G','G','G', 'G', 'G', 'G', 'G', 'G', 'G', 'G']] 65536 级数生成。
显然,这段代码并没有想象中的那么短小可爱。这就是为什么我想定义一个生成循环的函数。为了使它更好,我认为最好将它应该创建的循环数作为函数的参数添加,以便每次执行程序时都会选择它。
先感谢您
卢克
解决方案
您需要的是您的集合/列表的笛卡尔积chords
与自身 16 次。为此,您可以itertools.product()
使用 Python。
例如,要实现与您的代码相同的效果,您可以执行以下操作:
import itertools
chords = ['C', 'G']
progressions = list(itertools.product(chords, repeat=16))
print(progressions)
print(f'{len(progressions)} progressions generated.')
推荐阅读
- python - 创建 scikit-learn 贡献包
- c# - 生成 excel 清除 viewbag/tempdata
- django - 无法在 django 中使用反向 url 功能
- python - 从 WAV 文件中绘制正弦曲线
- vbscript - ADODB 记录集无法从 SQL 数据库中提取“XMLData”(xml 格式数据)
- go - gRPC 可以集成到 Flutter-web 中吗?
- r - 在 R 中,是什么使 NULL 原子化,因此不能存在于向量中?
- reactjs - 使用字符串动态响应 setState
- javascript - javascript迭代器中的递增计数器
- kubernetes - 如何在 Kubernetes 中找到服务的 url?