2014-12-08 1 views
0

Прошу прощения, если об этом спрашивают в другом месте, но то, что я искал, не вызвало необходимости в информации, и я не достаточно знать, какие другие ключевые слова использовать для дальнейшего поиска. Пожалуйста, поймите, что я совершенно новичок в программировании.Получение информации из каждого цикла для использования в следующем, без завершения цикла (Python)

ОК, теперь на бизнес. У меня есть два для создания петель. Первый цикл через список и объединяет его с несколькими другими строками, введенными через переменные. Вторая берет строку, сделанную в первом цикле, и конкатенирует данные из другого цикла на нее. Однако, когда я выполняю функцию, второй цикл использует последний результат из предыдущего цикла, а не привязывает данные ко всем строкам, сформированным из первого цикла. Вот пример:

j=0 
k=0 
for j in xrange(0, 2): 
     for k in xrange(0, 2): 
       first=(a + sign[k] + b) 
       k = k+1 
     second=(first + sign[j] + c) 
     print(second) 
     j = j+1 

где a, b, c и sign [] являются переменными.

Выход я хочу это:

a + sign[0] + b + sign[0] + c 
a + sign[1] + b + sign[0] + c 
a + sign[0] + b + sign[1] + c 
a + sign[1] + b + sign[1] + c 

Выход я получаю:

a + sign[1] + b + sign[0] + c 
a + sign[1] + b + sign[1] + c 

(Ну, я собираюсь использовать несколько значений, но это общая суть его)

Есть ли способ получить данные из первого цикла, не останавливая его для использования во втором цикле, чтобы создать такой список, т. Е. Заставить код использовать знак [0] в первом экземпляре а не только знак [1 ]? Кроме того, я хотел бы повторить, что я совершенно новичок в кодировании, поэтому, пожалуйста, помните об этом, когда отвечаете!

ответ

0

Необходимо напечатать элементы во внутреннем контуре, таким образом, вы печатаете для каждого разного значения j и k.

Также обратите внимание, что вам не нужно вручную увеличивать j и k - он позаботился о себе, поскольку это переменная цикла для каждого цикла.

Вы также можете изменить размер списка, который в настоящее время жёстко быть 2 - быть более гибким, используя len() функцию:

>>> for j in xrange(0,len(sign)): 
... for k in xrange(0,len(sign)): 
...  first = a + sign[k] + b 
...  second = first + sign[j] + c 
...  print(second) 
... 

вывода (I набор a='a',b='b',c='c',sign=['0','1'])

a0b0c 
a1b0c 
a0b1c 
a1b1c 
+0

Это именно то, что мне нужно! Спасибо огромное! Я не понимал, что вы можете вызывать переменную из внешнего цикла во внутреннем цикле. Еще раз спасибо! Это потрясающе! – Imamadmad

0

Использование itertools.product:

for first, second in itertools.product(sign[:2], sign[:2]): 
    print a + first + b + second + c 
0

Вы могли бы есть ошибка в коде, который вы реализуете k один раз слишком много. Цикл for убеждается, что k приращения, но у вас есть также k = k + 1 там, так что во время каждой итерации вы увеличивающийся на 2:

for k in xrange(0, 2): 
    first = .... 
    k = k + 1    # should this be here? 

Таким образом, цикл for будет работать только один раз, с одним k значения нуль.

Смежные вопросы