Python: динамический вложенный цикл для каждого с различным диапазоном - PullRequest
0 голосов
/ 01 июня 2018

Я хочу создать код, который может перебирать динамическое число (N) вложенных циклов, каждый из которых имеет свой диапазон.Например:

N=3 
ranges=[[-3, -2, -1, 0, 1, 2, 3],
 [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
  [-3, -2, -1, 0, 1, 2, 3]]

for x in ranges[0]:
    for y in ranges[1]:
        for z in range[2]:
            variable=[x, y, z]

Я новичок в Python.Когда я просматривал похожие вопросы, опубликованные здесь, я понимаю, что это можно сделать с помощью рекурсии или itertools.Однако ни один из опубликованных ответов не решает эту проблему для разных диапазонов на каждом уровне.Самый близкий опубликованный вопрос, похожий на мой, был Переменное число вложенных циклов с фиксированным диапазоном .Тем не менее, ответ, опубликованный user633183, написан на python 3.X, а я пишу на python 2.7, поэтому я не смог его реализовать, так как часть его кода не работает на python 2.7.Можете ли вы помочь мне, чтобы закодировать эту проблему.Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Итак, если я правильно понимаю ваш вопрос, вы хотите, чтобы значения для повторения были [-3, -5, -3], [-2, -4, -2]....Это может быть легко достигнуто с помощью функции zip, встроенной в python:

for x in zip(*ranges):
    # Do something with x

x будет принимать кортеж всех первых значений, затем кортеж всех вторых значений и т. Д., Останавливаясь, когда заканчивается самый короткий список,Использование этой * нотации сплат позволяет избежать даже необходимости знать количество списков, которые объединяются.

0 голосов
/ 01 июня 2018

Ваш код эквивалентен itertools.product:

print(list(itertools.product(*ranges)))
...