2016-10-30 6 views
0

Я хочу напечатать элементы из двух списков соответственно. Я написал код, как показано ниже:Вложенный в цикл цикл python

for i in list_a: 
    for j in list_b: 
    print(str(i) + str(j)) 

Идеальный результат был бы «А1 + В1», «A2 + B2» и т.д. Однако, линии выше только поля последний элемент в list_b. Когда я отступаю отпечаток:

for i in list_a: 
    for j in list_b: 
     print(str(i) + str(j)) 

Результат не верный. Я знаю, что это очень простой вопрос для цикла, но я очень смущен тем, как отличаются результаты.

+0

Можете ли вы поделиться примерами значений для 'list_a' и' list_b' и результата, который вы хотели бы получить для них? – Mureinik

+1

Но первый блок кода даст вам синтаксическую ошибку? Не могли бы вы прояснить? – idjaw

+1

'для i, j в zip (list_a, list_b): print (i + j)' – Mathias711

ответ

4

Как насчет использования zip?

for a, b in zip(list_a, list_b): 
    print('%s + %s' % (a, b)) 

Zip объединяет два или несколько списков вместе в кортежах, например .:

zip([1, 2, 3], [4, 5, 6]) # [(1, 4), (2, 5), (3, 6)] 

Кроме того, когда вы делаете print(a + b), вы просто добавляете строки вместе, а это значит, CONCAT. Например. если a был "a" и b был "b", a + b произвел бы "ab", а не "a + b", как вы хотели.

1

Я добавляю еще один ответ, потому что никто не объяснил, почему этот код не работает. Который мне кажется, что OP фактически искал.

Ваше решение 1:

for i in list_a: 
    #This indentation is inside 'i' loop 
    for j in list_b: 
      #This indentation is inside 'j' loop 
    print(str(i) + str(j)) 

шагнет через list_a, и для каждой итерации, шаг через все list_b (как нет ничего в блоке list_b кода, ничего не будет для каждого шага) THEN напечатайте, чтобы он распечатывался для каждого i в list_a и j всегда будет номером последнего элемента list_b, поскольку он прошел через все это.

Хотя этот код, вероятно, не будет работать в любом случае, поскольку есть пустой блок кода, и компилятор, вероятно, выбрать, что с IndentationError

Ваше решение 2:

for i in list_a: 
    for j in list_b: 
     print(str(i) + str(j)) 

шагнет через все list_a и для каждого элемента выполните все list_b, поэтому в итоге вы получите A1B1, A1B2, A1B3 и т. д.

Предпочтительного раствор

Решение состоит в том, чтобы пройти через обоих списки в то же время, с той же скоростью, которая охватывает this answer красиво, по существу, с тем же раствором, как @Pavlins ответ.