2016-11-07 1 views
0

Я пытаюсь построить цикл for, в котором я буду использовать индексы цикла для элементов в моем списке. Вот мой код:Неожиданный начальный индекс в двойном для цикла

a1 = [] 
a2 = [] 
for i in range(1, 91, 2): 
    for j in range(1, i, 2): 
     a1.append(float(i)) 
     a2.append(float(j)) 

В идеале я хотел бы a1 начать с 1.0, но когда я печатаю его элементы, я получаю, что она начинается с 3,0 вместо:

[3.0, 5.0, 5.0, 7.0, 7.0, 7.0, 9.0, 9.0, 9.0, 9.0, 11.0, 11.0, 11.0...] 

Что я делаю Неправильно здесь? Я действительно смущен. Я думал, что у меня будет 1.0 как первый элемент, за которым следует 3.0, благодаря шагу 2 и так далее.

Поскольку я не был в состоянии найти ответы на это, прошу прощения, если это было задано раньше. Заранее благодарю за любую помощь.

Редактировать: Спасибо всем за ваш вклад в то, что происходило! Вы все были очень полезны. И спасибо jojo за исправление моего формата.

+1

В вашем внутреннем цикле, если 'i = 1', вы имеете' для j в диапазоне (1,1,2) ', который является пустым списком. В этом случае все, что находится во внутреннем цикле, не выполняется. – jojo

ответ

0

Это потому, что когда i = 1 внутренняя j петля имеет вид:

for j in range(1, 1, 2): 
    ... 

И, следовательно, не работает и не итерации, как функция range возвращает пустой список.

>>> range(1, 1, 2) 
[] 

Поэтому нет не добавляет выполняются в первой итерации внешнего цикла.

1

Это происходит потому, что, когда i равно 1, внутренняя j-контура никогда не происходит. Так что вы хотите сделать, это добавить я к a1, прежде чем перейти во внутренней петлю J

for i in range(1, 91, 2): 
     a1.append(float(i)) 
     for j in range(1, i, 2): 
      a2.append(float(j)) 

Надеется, что это помогает!

+0

Обратите внимание, что это производит другой вывод, так как 'i' будет добавляться только один раз за итерацию внешнего цикла, так что, например,' 5.0' будет только один раз в 'a1' и не в два раза больше, чем на выходе, показанном в вопрос. – jojo