ФорумПрограммированиеPython → Циклы в Python

Циклы в Python

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 4:06

    Есть два вида циклов while и for


    L = [1,2,3,4,5]
    for x in L:
    print x,
    # '1 2 3 4 5'



    while True:
    reply = raw_input('Enter: ')
    if(reply == 'stop'): break
    print reply.upper()
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 13:06, спустя 8 часов 59 минут 39 секунд

    Рассмотрим for, если ему передать список, строку, кортеж - то будут в "x" значения.


    L = [1,3,5]
    for x in L:
       print x,
    # 1 3 5

    S = 'str'
    for x in S:
       print x,
    # s t r

    T = (76, 45, 11)
    for x in T:
       print x,
    # 76 45 11


    а если передать словарь - то будут ключи:


    D = {'a': 'abc', 'd': 'def', 'g': 'ghi'}
    for x in D:
       print x,
    # a d g


    Это тоже самое что пройтись по D.keys(), по умолчанию так и делается, чтобы пройтись по значениям надо вызвать метод явно: D.values()


    D = {'a': 'abc', 'd': 'def', 'g': 'ghi'}
    for x in D.values():
       print x,
    # abc def ghi

    Спустя 214 сек.
    Некоторым не хватает "нормального фора" как в сях и в php в частности:


    for ($i = 0; $i < 100; $i++) {
       echo $i;
    }


    Но, простите чем вам следующее выражение не поведение обычного фора?

    for i in range(100):
       print i,
    Спустя 77 сек.

    L = [1,2,3,4,5]
    for i in L:
       print i,

    for i in L.keys():
       print i,
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 4:38, спустя 15 часов 32 минуты 25 секунд

    В циклах python допустимы такие конструкции как break, continue, else, pass

    while <expression 1>:
    <statements 1>
    if <expression 2>: continue
    if <expression 3>: break
    else:
    <statemens 2>


    а pass это просто пустышка:

    while True:
    pass


    для того чтобы заполнить statemens, если оно пустое…
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 4:47, спустя 8 минут 47 секунд

    пример генераторов списков,
    вывод всех нечетных значений в списке:


    L = [1,2,3,4,5,6]
    N = [v for v in L if v % 2]


    в N будет [1,3,5], так как нечетные будут давать остаток от деления, а четные нет
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 10:25, спустя 5 часов 37 минут 33 секунды

    Но, простите чем вам следующее выражение не поведение обычного фора?

    Поведение обычного фора можно и через while и через goto и через, прости господи, рекурсию можно получить.
    Но лично мне нравится поведение обычного фора получать через for.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 11:29, спустя 1 час 4 минуты 15 секунд

    vasa_c, имхо, это все капризы
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 14:41, спустя 3 часа 12 минут 35 секунд


    в N будет [1,3,5], так как нечетные будут давать остаток от деления, а четные нет


    а это уже жопа прости :)

    то есть вместо 1млна записей мне придется перебрать два миллиона и откинуть половину? :) на данух такое счастье, ведь суммирование - в разы более простая операция(в 1 такт если не ошибаюсь) нежели деление(а там вообще пиздец сложность :) )

    нормальных

    for($i=0; $i<$x; $i+= 2) {}

    нет?
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 14 ноября 2009 г. 15:02, спустя 20 минут 26 секунд

    так он же вроде по значениям смотрит а не по ключам.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 15:07, спустя 5 минут

    а это уже жопа прости :)

    то есть вместо 1млна записей мне придется перебрать два миллиона и откинуть половину? :) на данух такое счастье, ведь суммирование - в разы более простая операция(в 1 такт если не ошибаюсь) нежели деление(а там вообще пиздец сложность :) )
    эм, не понял к чему это, я просто привел пример генератора списка, если хочешь приведи другой и я оформлю в виде генератора
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 15:08, спустя 1 минуту 5 секунд

    adw0rd, я просто сказал что итерации с определенным шагом (ты же их делал вроде) должны выглядеть как операции с шагом))

    Спустя 7 сек.
    а не как костыль)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 15:08, спустя 31 секунду

    нормальных

    for($i=0; $i<$x; $i+= 2) {}

    нет?
    такого именно вида нет, я уже об этом сказал.
    скажи мне что у тебя в $x и я приведу пример аналога на python
    Спустя 27 сек.

    adw0rd, я просто сказал что итерации с определенным шагом (ты же их делал вроде) должны выглядеть как операции с шагом))

    Спустя 7 сек.
    а не как костыль)
    я не показывал итерации с шагом
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 15:11, спустя 2 минуты 22 секунды

    adw0rd, в х .. ну например 1млн )))

    ну пример утрированный, как и сама задача - перебор с шагом != 1 … я вот почти не разу не юзал вроде … %)

    устал я седня. грузчиков двое суток уже работаю, а сегодня еще ыл плотником, сборщиком мебели, сантехником, и блядбь не поверите, программистом на пхп еще придется побыть ))
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 16 ноября 2009 г. 6:09, спустя 1 день 14 часов 58 минут


    $x = 1000000;
    for($i=0; $i<$x; $i+= 2) {}



    x = 1000000
    i = 0
    while i < x:
       i += 2


    нравятся короткие конструкции?

    x=1000000;i=0
    while i<x: i+=2
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 15:40, спустя 9 часов 31 минуту 36 секунд

    ну да, я говорю же чтото неподумал, прости меня эдво, я провинился …
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 ноября 2009 г. 15:53, спустя 12 минут 46 секунд

    phpdude, да ладно, мы все тебя любим, просто ты бываешь резок, но такой ты уж есть )
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!