Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 25, 2014 11:45:07

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Budulianin
Просто я посмотрел на твой нерациональный подход и решил написать свой вариант.

Ты бессмысленно перебираешь массив 2 раза, когда задача решается в один проход, причём строки хранишь в списке(в памяти).
С моей стороны был осознанный выбор. Мой подход более очевиден и более легко модифицируется, при необходимости. Данные я могу обрабатывать как-нибудь ещё, генератор использовать тоже по-разному. Файловый дескриптор далее второй строки нигде не используется - это видно при беглом просмотре текста.

Офлайн

#2 Июнь 25, 2014 12:01:05

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Budulianin
+ используешь strip, хотя достаточно rstrip
Лучше strip, т.к. в файле могут быть лидирующие пробелы и strip элементарно короче пишется.
Budulianin
enumerate я тоже осознанно не использовал
enumerate говорит сам за себя и скрывает мешающую механику счетчиков.
Budulianin
result.append([i, j])
я считаю что лучше писать, а не
result.append((i, j))
Читается лучше, но расходы памяти больше, если её беречь.

Отредактировано Shaman (Июнь 25, 2014 12:02:17)

Офлайн

#3 Июнь 25, 2014 12:05:17

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Shaman
Лучше strip, т.к. в файле могут быть лидирующие пробелы
Может быть.

Shaman
strip элементарно короче пишется.
:D

Shaman
enumerate говорит сам за себя и скрывает мешающую механику счетчиков.
Просто там лишние действия происходят, которые можно не делать.

Shaman
Читается лучше, но расходы памяти больше, если её беречь.
Намного?



Офлайн

#4 Июнь 25, 2014 12:12:51

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Budulianin
Просто там лишние действия происходят, которые можно не делать.
А сколько внутри интерпретатора действий происходит, но не писать же это на С? Использовал это всё в time-memory-limited проектах - ничего смертельного.
Budulianin
Намного?
Нет, конечно.

Офлайн

#5 Июнь 25, 2014 12:28:57

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Shaman
А сколько внутри интерпретатора действий происходит, но не писать же это на С?
Не писать, но и не делать лишние действия(такие как обходы последовательностей лишний раз, хранения в памяти ненужных объектов и тп)

Shaman
Нет, конечно.
Ну вот и я о том же, поэтому лучше писать там список.



Офлайн

#6 Июнь 25, 2014 12:33:03

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Shaman
Использовал это всё в time-memory-limited проектах - ничего смертельного.
Тут дело не в том смертельно это или нет для машины, просто чем рациональнее алгоритм, тем лучше(в разумных пределах и в рамках Python)

Сегодня у меня такое мнение.



Отредактировано Budulianin (Июнь 25, 2014 12:36:25)

Офлайн

#7 Июнь 25, 2014 14:41:18

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Budulianin
просто чем рациональнее алгоритм, тем лучше(в разумных пределах и в рамках Python)
Рациональность - штука неабсолютная и определяется целями.
Budulianin
Сегодня у меня такое мнение.
А я за гуманистическое программирование, ибо чего стоит куча слоёв абстракций, если все их придётся умозрительно разворачивать для “оптимизации”?

Отредактировано Shaman (Июнь 25, 2014 14:45:37)

Офлайн

#8 Июнь 25, 2014 21:01:15

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

Shaman
Рациональность - штука неабсолютная и определяется целями.
Сохранять все строки в список, потом опять перебирать их, когда есть итератор и можно эти действия сделать за одну итерацию, при такой задаче, это абсолютно нерационально.

Shaman
А я за гуманистическое программирование, ибо чего стоит куча слоёв абстракций, если все их придётся умозрительно разворачивать для “оптимизации”?

Если они есть, то это не значит, что их нужно пихать во все дырки.



Офлайн

#9 Июнь 25, 2014 21:57:22

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

помогите гуманитарию на экзамене!

Budulianin
Ну вот и я о том же, поэтому лучше писать там список.
Прочитай пункт dip3. tuples


Shaman
Так же предпочтительнее квантовать код по зонам ответственности.

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

Так вот, если обернуть чтение данных в функцию, получится модуль.
Shaman
with open('graph.dat') as f:
    data = [l.strip() for l in f]
def edges(data):
    for r, rd in enumerate(data, 1):
        for c, cd in enumerate(rd, 1):
            if int(cd):
                yield r, c

def read():
    with open('graph.dat') as f:
        data = [l.strip() for l in f]
    return data
 
def edges(data):
    for r, rd in enumerate(data, 1):
        for c, cd in enumerate(rd, 1):
            if int(cd):
                yield r, c

И можно рассмотреть два модуля: чтения данных и обработки данных.
Модули должны быть независимыми. Не знать друг о друге.

Shaman
            if int(cd):
А в эту строку проник int, который знает, как были прочитаны данные. Узнал он это через устройство data, которое зависит от модуля чтения. То есть модули чтения и обработки сцеплены по формату, по формату data. Стоит измениться формату data в модуле чтения, и модуль обработки сломается.



Отредактировано py.user.next (Июнь 25, 2014 22:42:15)

Офлайн

#10 Июнь 25, 2014 22:44:15

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

помогите гуманитарию на экзамене!

py.user.next
Прочитай пункт dip3. tuples

Ну прочитал.
Пилгримм говорит, что нужно использовать tuple, если не нужны возможности списка(изменяемость).
Потому что он быстрее. Tuple отличается от списка, только тем, что у него нет методов для изменения своего содержимого.

Ничего нового. Кроме того, что Пилгримм рекомендует отказаться от списка, если его возможности не используются, что вполне логично. Только мне не нравится смотреть на несколько однотипных скобок подряд, да и не только мне.



Отредактировано Budulianin (Июнь 25, 2014 22:49:12)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version