2014-01-04 2 views
0

Ниже приведен пример кода, который я бегу:Имея некоторые проблемы с для петель и list.append()

#!/usr/bin/python 

x=[] 
for i in range(0,20): 
    x.append(i) 
y=[] 
for i in x: 
    y.append(-1*x[i]) 

for i in y: 
    print i, y[i] 

Ожидаемый результат:

0 0 
1 -1 
2 -2 
3 -3 
4 -4 
5 -5 
6 -6 
7 -7 
8 -8 
9 -9 
10 -10 
11 -11 
12 -12 
13 -13 
14 -14 
15 -15 
16 -16 
17 -17 
18 -18 
19 -19 

Вместо этого я получаю:

0 0 
-1 -19 
-2 -18 
-3 -17 
-4 -16 
-5 -15 
-6 -14 
-7 -13 
-8 -12 
-9 -11 
-10 -10 
-11 -9 
-12 -8 
-13 -7 
-14 -6 
-15 -5 
-16 -4 
-17 -3 
-18 -2 
-19 -1 

Почему это?

ответ

3

Вы можете использовать enumerate, чтобы получить желаемый выход:

for i,val in enumerate(y): 
    print (i, val) 

Вашей проблемы в том, что for i in y дает фактические элементы в у. Вы использовали их в качестве индексов при печати y [i]. Когда вы используете отрицательное число в качестве индекса, он отсчитывает назад от конца списка (поэтому y [-1] - последнее значение в списке, y [-2] - второе и последнее и т. Д.).

+0

Это исправление я искал. Благодаря! – Greg

+0

Нет проблем :) Если вы чувствуете, что мой или мой или кто-то elses ответ помог вам, пожалуйста, проголосуйте и [принимайте] (http://stackoverflow.com/help/someone-answers) их ответ. – Ffisegydd

1
for i in y: 
    print i, y[i] 

Печать i (которая поступает из y) и y [1], которая также обращается к y. Я думаю, что вы хотели:

for i in x: 
    print i, y[i] 

Если интересно отметить, что, поскольку исходный код посылает отрицательные числа в качестве индекса у (то есть у [-1]) он получал элементы с конца и идет в обратном направлении , Весело.

1

for i in yне производят индексы. Он производит номера, уже сохраненные в y, от 0 до -19. Эти отрицательные индексы затем reapplied до y дают вам индексы, подсчитанные с конца списка.

Другими словами, на первой итерации y[0] является 0 и печатает 0, 0. Вторая итерация y[1] равна -1 и y[-1], последний элемент в y равен -19, потому что при использовании отрицательного индекса длина списка добавляется к индексу, поэтому печатается -1 -19. И т.д.

Пути Pythonic для печати индексов вместе со значениями списка должны использовать enumerate(); как это:

for i, value in enumerate(y): 
    print i, value 

но вы могли бы также сделать:

for i in range(len(y)): 
    print i, y[i] 
0

Проблема вызвана тем, что в последнем цикле for i in y, i присваивается каждому из значений, а не индексы , Таким образом, i присваивается -1, -2, ..., -19 и т. Д. И доступ к отрицательному индексу -i списка возвращает i-й элемент, подсчитывающий из задней части списка.

I.e.

>>> [1, 2, 3, 4, 5, 6][-1] 
6 
>>> [1, 2, 3, 4, 5, 6][-4] 
3 
0

попробовать это (внесены изменения в последнюю строку):

x=[] 
for i in range(0,20): 
    x.append(i) 
y=[] 
for i in x: 
    y.append(-1*x[i]) 

for i in y: 
    print x[-i], y[-i] 
0

Неожиданный выход вызван последним циклом.

for i in y: 

я зациклился над значениями у которых значения, которые вы видите в первой колонке

, поскольку значения для я отрицательны в этом цикле вы получите индекс с конца первого запуска в -1, равный последнему элементу, -2 - второй и последний и т. Д. Конечно, нулевой индекс неотрицателен и индексы с начала массива

для получения значений для i вы ожидаете от вас может пересекать значения в x [] или в диапазоне значений индекса в y

for i in x: 
    print i, y[i] 

или

for i in range(0,len(y)): 
    print i, y[i] 
Смежные вопросы