2014-02-07 3 views
0

Почему цикл for не работает?Python: для цикла не работает

l=[1,2,3,4,5] 
def times(x): 
    for i in len(x): 
     x[i]+=10 
times(l) 
print l 

В идеале он должен напечатать элементы списка увеличивается на 10. Но это дает мне следующую ошибку:

Traceback (most recent call last): 
    File "ex1.py", line 5, in <module> 
    times(l) 
    File "ex1.py", line 3, in times 
    for i in len(x): 
TypeError: 'int' object is not iterable 

Где я буду неправильно?

+0

* для я в Len (х) * => * для я в диапазоне (LEN (х)) * – MarshalSHI

+0

Вы забываете читать как 'for' работает в Python. –

ответ

4

len Функция вернет только длину списка. Его просто число, поэтому вы не можете его перебирать с помощью цикла for.

Возможно, вы хотите использовать функцию xrange, наряду с len(x)

for i in xrange(len(x)): 

Мы используем xrange функции здесь, потому что range функции создает весь список в памяти перед итерацией. Например,

print range(10) 

даст вам недавно построенный список с элементами от 0 до 9. Подумайте о переборе очень большой список. Допустим, что размер списка 10000000. Это действительно пустая трата памяти для генерации чисел от 0 до 10000000, просто ради итерации, правильно? Вот почему мы используем xrange.

Возвращает итерируемый объект, который дает одно число за раз, итерации. Его очень эффективная память, так как нам не нужно создавать весь список.

Предложение: Если нет необходимости изменять исходный список, вы можете создать новый список и вернуть его.

раз четкости (my_list, my_num = 10): возвращение [current_num + my_num для current_num в my_list]

л = [1,2,3,4,5] л = раз (л) print l

Он будет иметь такой же эффект на данные, как и первый. Но мы используем понимание списка для создания нового списка и назначаем его переменной l. Итак, теперь l указывает на только что созданный список вместо старого.

2

Это потому, что len (x) является целым числом, вам нужно создать список, например.

l=[1,2,3,4,5] 
def times(x): 
    for i in range(len(x)): 
     x[i]+=10 
times(l) 
print l 
Смежные вопросы