Найти - Пользователи
Полная версия: Зачем доп элемент в for для перебора списка?
Начало » Python для новичков » Зачем доп элемент в for для перебора списка?
1
Webfave
Здравствуйте.

Зачем доп элемент “element” в for для перебора списка?

spisok = [10, 20, 30, 40, 50, 60, 70, 80, 90]
i = 0
for element in spisok:
    print(element)
    print(spisok[i])
    spisok[i] = element + 2
    i = i + 1
print(spisok)

Почему нельзя перебирать как массив в других языках? Как работает понятно. Не понятно, какое преимущество дает дополнительная переменная element. Она вроде что-то указателя на элемент списка.

spisok = [10, 20, 30, 40, 50, 60, 70, 80, 90]
i = 0
for i in spisok:
    print(spisok[i])
    spisok[i] = spisok[i] + 2
    i = i + 1
print(spisok)

UPD:
Нашел не полный ответ на свой вопрос.
Цикл for широко используется в языке программирования Python, т.к. является
важным инструментом при обработки структур данных. Также следует запомнить, что
цикл for в Питоне особенный. Он не является аналогом циклов for во многих других
языках программирования, где представляет собой, так называемый, цикл со
счетчиком
Singularity
Webfave
Почему нельзя перебирать как массив в других языках?
потому-что это по тупому, а в питоне все няшное и кавайное
Webfave
А по существу можете ответить? Чем такое разделение лучше?
Singularity
так намного удобней

что обычно делают с for ? переберают елементы в структуре или делают что-то N число раз
for(i=0; i <Array.length;i++){
    dosomething(Array[i])
}
#в питоне 
for x in list:
    dosomething(x)
Сделть что-то N число раз
n = 100
for(i=0; i <n ;i++){
    dosomething()
}
# питон
for _ in range(100):
    dosomething()
sergeek
Webfave
Чем такое разделение лучше?
Работу такого цикла проще понять.
http://en.wikipedia.org/wiki/Foreach_loop
inplace-модификация коллекции - моветон
Webfave
Она вроде что-то указателя на элемент списка.
это копия а не указатель
Webfave
В примере переменная i нужна для того, чтобы записать изменившееся значение элемента в список. В ней хранится значение индекса очередного элемента списка. В то время, как переменная element связывается со значением очередного элемента данных. В заголовке цикла for происходит обращение очередному элементу списка.

Красоту, изящество, простоту Python я уже ощутил с первых дней изучения.

Вопрос возник, потому что хотел циклом for увеличить значение переменной несколько раз.
Например, на паскале можно написать от 0 до 10. Пытался то же самое написать на питоне, не работает.

Если я правильно понял, то значение всегда должно быть списком в for.
for i=0 in [0, 1, 2, 3, 4]
или
for i=0 in range(5) # range возвращает список из 5 элементов
или
for _ in range(5) # _ замена нулевого элемента

В целом разобрался.

a = 0
if a<=4:
    for _ in range(10):
        print(a)
        a = a + 1

Спасибо за помощь и ссылки.
doza_and
Webfave
Почему нельзя перебирать как массив в других языках?
Можно:
a=[1,2,3]
for i in range(len(a)):
    print(a[i])
Webfave
Не понятно, какое преимущество дает дополнительная переменная element
В обычном цикле с индексом она тоже есть - это индекс. Поэтому она не дополнительная.
Посмотрите:
for e in a:
    print(e)
for i in range(3):
   print(e[i])
На каждое использование элемента из списка получается по 3 или более лишних буковки:
[i]
Webfave
то значение всегда должно быть списком
Нет. Объект должен поддерживать протокол итератора.
Несколько странный у вас код:
a = 0
if a<=4: # Зачем проверять - вы только что присвоили?
    for _ in range(10):
        print(a)
        a = a + 1 # почему не используете  a+=1?
py.user.next
Webfave
Например, на паскале можно написать от 0 до 10.
for i in range(0, 11):
если собрался границы через константы или переменные задавать

ты, вообще, нашёл с чем сравнивать, в Паскале циклы не только куцые, но и избыточные (друг друга заменяют)
то есть сделать ничего нельзя, зато левых операторов - вагон
Webfave
doza_and
Несколько странный у вас код
Что вы имеете ввиду? Страшный по оформлению? Вроде все по табу делал…
Если вы про конструкцию с if elif else, то я просто изучаю по книге и проверяю все конструкции.

doza_and
# почему не используете a+=1?
Изучаю Питон по книге, там был пример. Я все примеры и конструкции перебираю.
В курсе, что данная конструкция работает быстрее. Спасибо.

py.user.next
если собрался границы через константы или переменные задавать
Про range уже узнал, спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB