Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2013 07:36:02

Webfave
От: Москва
Зарегистрирован: 2013-11-28
Сообщения: 8
Репутация: +  -1  -
Профиль   Отправить e-mail  

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

Здравствуйте.

Зачем доп элемент “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 во многих других
языках программирования, где представляет собой, так называемый, цикл со
счетчиком

Отредактировано Webfave (Ноя. 30, 2013 07:54:38)

Офлайн

#2 Ноя. 30, 2013 08:36:24

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

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

Webfave
Почему нельзя перебирать как массив в других языках?
потому-что это по тупому, а в питоне все няшное и кавайное

Офлайн

#3 Ноя. 30, 2013 08:57:50

Webfave
От: Москва
Зарегистрирован: 2013-11-28
Сообщения: 8
Репутация: +  -1  -
Профиль   Отправить e-mail  

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

А по существу можете ответить? Чем такое разделение лучше?

Офлайн

#4 Ноя. 30, 2013 09:02:51

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

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

так намного удобней

что обычно делают с 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()

Отредактировано Singularity (Ноя. 30, 2013 09:06:24)

Офлайн

#5 Ноя. 30, 2013 09:12:48

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

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

Webfave
Чем такое разделение лучше?
Работу такого цикла проще понять.
http://en.wikipedia.org/wiki/Foreach_loop
inplace-модификация коллекции - моветон
Webfave
Она вроде что-то указателя на элемент списка.
это копия а не указатель

Офлайн

#6 Ноя. 30, 2013 09:51:50

Webfave
От: Москва
Зарегистрирован: 2013-11-28
Сообщения: 8
Репутация: +  -1  -
Профиль   Отправить e-mail  

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

В примере переменная 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

Спасибо за помощь и ссылки.

Офлайн

#7 Ноя. 30, 2013 17:01:11

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

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

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?



Отредактировано doza_and (Ноя. 30, 2013 17:02:07)

Офлайн

#8 Ноя. 30, 2013 20:29:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

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

Webfave
Например, на паскале можно написать от 0 до 10.
for i in range(0, 11):
если собрался границы через константы или переменные задавать

ты, вообще, нашёл с чем сравнивать, в Паскале циклы не только куцые, но и избыточные (друг друга заменяют)
то есть сделать ничего нельзя, зато левых операторов - вагон



Отредактировано py.user.next (Ноя. 30, 2013 20:30:34)

Офлайн

#9 Дек. 1, 2013 06:45:45

Webfave
От: Москва
Зарегистрирован: 2013-11-28
Сообщения: 8
Репутация: +  -1  -
Профиль   Отправить e-mail  

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

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

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

py.user.next
если собрался границы через константы или переменные задавать
Про range уже узнал, спасибо!

Отредактировано Webfave (Дек. 1, 2013 06:54:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version