Найти - Пользователи
Полная версия: помогите гуманитарию на экзамене!
Начало » Центр помощи » помогите гуманитарию на экзамене!
1 2 3 4
Shaman
Budulianin
Просто я посмотрел на твой нерациональный подход и решил написать свой вариант.

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

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

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

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

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

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

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

Если они есть, то это не значит, что их нужно пихать во все дырки.
py.user.next
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 в модуле чтения, и модуль обработки сломается.
Budulianin
py.user.next
Прочитай пункт dip3. tuples

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

Ничего нового. Кроме того, что Пилгримм рекомендует отказаться от списка, если его возможности не используются, что вполне логично. Только мне не нравится смотреть на несколько однотипных скобок подряд, да и не только мне.
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