Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.16.254] |
|
Страницы: (32) « Первая ... 24 25 [26] 27 28 ... 31 32 ( Перейти к последнему сообщению ) |
Сообщ.
#376
,
|
|
|
Всё рекурсивное программирование построено на том, что у списка отделяется голова (один элемент), а хвост является самостоятельным списком.
Когда у меня на прологе лекция, посвящённая различным сортировкам, я за одну лекцию показываю все сортировки, которые они долбили полсеместра на структурах данных. Не лекция, а стенд-ап какой-то. Обработал один, максимум два элемента, а для обработки хвоста вызвал рекурсию. Всё. Я очень люблю писать с помощью рекурсии и на паскале - удобно для меня. Но насколько это замедляет программу - другой вопрос. Добавлено Про кодескульптор мне кто-нибудь ответит? Не поняла принцип его работы. Зарегаться там нельзя, но ссылки сохраняют написанный код. И как долго эти ссылки будут рабочие? |
Сообщ.
#377
,
|
|
|
Я про кодескульптор ничего не знаю. Он вообще странный, не для всего стандартного импорт поддерживает, например.
На других подобных ресурсов ссылки живут бесконечно. |
Сообщ.
#378
,
|
|
|
Кстати, я не сетую, а, наоборот, радуюсь! у строки метод можно вызвать прямо в консольном приложении.
Это большой плюс |
Сообщ.
#379
,
|
|
|
Цитата swf @ Когда у меня на прологе лекция, посвящённая различным сортировкам, я за одну лекцию показываю все сортировки, которые они долбили полсеместра на структурах данных. Не лекция, а стенд-ап какой-то. Ага, небось по классике показываете и быструю сортировку, которая на самом деле не быстрая |
Сообщ.
#380
,
|
|
|
И ещё сверхбыструю. Они хорошо на рекурсию ложатся.
Но самый улёт - жутко алгоритмичная сортировка пузырёк. Натянуть на неё рекурсию - всё равно что сову на глобус. Мне в этом году заданья удалённо сдавали, одна девочка в комментариях к пузырьку написала: Ну вот зачем такое сложное-то задавать?! Обнаружила, что у питоновских списков функцией del можно удалять нулевой элемент (голову!)и сохранять хвост как новый список. Офигеть. Ничто не мешает мне работать со списками как в прологе. (Замедлит ли это программу - другой вопрос. У пролога всё очень оптимизировано и заточено под рекурсию). Ну я как бы развлекаюсь с новым языком, изучаю его возможности. Питон - мегакрутой язык |
Сообщ.
#381
,
|
|
|
>у питоновских списков функцией del можно удалять нулевой элемент (голову!)и сохранять хвост как новый список.
Во многих случаев в Python этого в явном виде не делают, а просто используют срезы alist[1:] или без хвостика - alist[:-1] |
Сообщ.
#382
,
|
|
|
Цитата MBo @ >у питоновских списков функцией del можно удалять нулевой элемент (голову!)и сохранять хвост как новый список. Во многих случаев в Python этого в явном виде не делают, а просто используют срезы alist[1:] или без хвостика - alist[:-1] Спасибо, MBo, прямо вовремя: уже собралась извращаться, на питоне как на прологе писать. Прямо изготовилась Значит надо срезы изучить. ЗЫ. С одной стороны, столько нужных дел в сторону подвинула из-за питона, с другой стороны - прикольно. Изучение нового языка поднимает настроение, как ни странно. Добавлено Сколько по питону хорошей литературы! Погуглила индексы и срезы и сразу нашла: https://pythonworld.ru/osnovy/indeksy-i-srezy.html |
Сообщ.
#383
,
|
|
|
В Прологе список это настоящий список (данные + ссылка на хвост), В Питоне - это аналог массива. Поэтому удаление первого элемента или любого интервала в списке сопровождается переписыванием этого массива.
Для списка в Питоне допустимы команды del a[i] # Удаление элемента del a[i:j] # Удаление диапазона del a[:i] # Удаление начала списка del a[i:] # Удаление конца списка del a[i:j:k] # Удаление среза Точно, как реализовано, не знаю, но скорее всего команда пробегает по списку и перемещает в начало те элементы, индексы которых не попадают в срез. |
Сообщ.
#384
,
|
|
|
Да, конечно, реализация списка другая. В Прологе элементы списка не нумерованы, чтобы, скажем, удалить не первый элемент, до него нужно ещё дойти.
Со срезами обнаружила, что отрицательный и положительный шаг обрабатывается по разным правилам. Если шаг положительный, то начальное значение (н.з) может быть больше конечного (к.з). Последний элемент имеет индекс -1, можно брать диапазон, скажем, от 0 до -1: a[0:-1:+1] А если шаг отрицательный, то всё: н.з. должно быть больше к.з. Например, идём в обратном порядке от последнего элемента до первого (не включая): a[-1:0:-1] - не работает. Это очень странно. Вместо одного правила нужно запоминать два. И где: в работе с основной структурой для представления данных. |
Сообщ.
#385
,
|
|
|
Цитата swf @ Например, идём в обратном порядке от последнего элемента до первого (не включая): a[-1:0:-1] - не работает. Это очень странно. В каком смысле не работает? >>> a = [1, 2, 3, 4, 5] >>> a[-1:0:-1] [5, 4, 3, 2] |
Сообщ.
#386
,
|
|
|
А ещё можно присваивать диапазоны. a[1:4] = sorted(a[1:4]), например, отсортирует второй, третий и четвёртый элемент. Или даже так: a[::2] = sorted(a[::2]), и оно, очевидно, отсортирует между собой каждый второй элемент.
|
Сообщ.
#387
,
|
|
|
Цитата D_KEY @ Цитата swf @ Например, идём в обратном порядке от последнего элемента до первого (не включая): a[-1:0:-1] - не работает. Это очень странно. В каком смысле не работает? >>> a = [1, 2, 3, 4, 5] >>> a[-1:0:-1] [5, 4, 3, 2] Заработало Вот что форум.сорс.ру животворящий делает Ладно, буду экспериментировать дальше, если за компом не усну. Добавлено Цитата OpenGL @ А ещё можно присваивать диапазоны. a[1:4] = sorted(a[1:4]), например, отсортирует второй, третий и четвёртый элемент. Или даже так: a[::2] = sorted(a[::2]), и оно, очевидно, отсортирует между собой каждый второй элемент. Сортировка встроенная, это правильно |
Сообщ.
#389
,
|
|
|
Освежить тему мнением, что ли...
ИМХО следует разделять понятия "обучить программированию" и "обучить языку". С моей точки зрения, научить языку сродни вызубрить разговорник. Говорить сможешь, но точно выверенные за тебя кем-то другим фразы, понимать сможешь только чёткие паттерны, а выразить что-то своё или поговорить с первым попавшимся носителем языка не получится. Гораздо эффективнее будет не словарный запас наращивать, а изучать правила словообразования и грамматики. Тогда даже со скудным набором слов общение будет куда живее и внятнее. За обучение программированию в ВУЗах следует топить в первую очередь как раз в направлении обучения технологиям, и только во вторую очередь их применениям на практике в рамках какого-либо языка. Какого именно, не так важно, но безусловно, чем больше потенциал у языка, тем лучше. Это позволит сосредотачиваться на важном в обоих сферах, и в теории, и на практике, вместо того, чтобы расслаивать теорию по разным направлениям её реализации в разных языках. В этом смысле Паскаль давно себя, конечно, изжил. Технологий там кот наплакал, и дальше азов, которые и школьнику не составит труда понять и освоить, он практики не предоставит. Какой язык выбрать вместо... конечно Плюсы. Я не знаю ещё одного языка, на грамматике которого можно легко реализовать такое огромное множество теоретических паттернов (я сейчас не за GoF или что-либо подобное), особенно вкупе с поддержкой со стороны Стандартной библиотеки. Плюс к этому ещё то, что его не требуется знать глубоко, чтобы писать хорошие приложения. Даже имея лишь базовую теоретическую подготовку и базовые же, изучаемые буквально за минуты, синтаксические конструкции, можно писать эффективные решения в рамках изученного материала. Даже о Java сказать того же нельзя, там сразу уже надо знать гораздо больше, чтоб хоть что-то работающее написать. Конечно, изучать Плюсы во всю глубину нужно долго, но это если такую цель перед собой ставить, вопрос лишь в том, а надо ли. И ответить на этот вопрос может для себя каждый студен сам, язык не принуждает. |
Сообщ.
#390
,
|
|
|
Нашла ошибку в уч. пособии, докопалась
Цитата >>>a[1:4:-1] [] В последнем примере получился пустой список, так как START < STOP, а STEP отрицательный. В a[-1:0:-1] START тоже меньше STOP, а STEP отрицательный. Правильно: В последнем примере получился пустой список, так как START и STOP неотрицательные, STEP отрицательный и START < STOP. Добавлено Цитата Qraizer @ Освежить тему мнением, что ли... ИМХО следует разделять понятия "обучить программированию" и "обучить языку". С моей точки зрения, научить языку сродни вызубрить разговорник. Говорить сможешь, но точно выверенные за тебя кем-то другим фразы, понимать сможешь только чёткие паттерны, а выразить что-то своё или поговорить с первым попавшимся носителем языка не получится. Гораздо эффективнее будет не словарный запас наращивать, а изучать правила словообразования и грамматики. Тогда даже со скудным набором слов общение будет куда живее и внятнее. За обучение программированию в ВУЗах следует топить в первую очередь как раз в направлении обучения технологиям, и только во вторую очередь их применениям на практике в рамках какого-либо языка. Какого именно, не так важно, но безусловно, чем больше потенциал у языка, тем лучше. Это позволит сосредотачиваться на важном в обоих сферах, и в теории, и на практике, вместо того, чтобы расслаивать теорию по разным направлениям её реализации в разных языках. В этом смысле Паскаль давно себя, конечно, изжил. Технологий там кот наплакал, и дальше азов, которые и школьнику не составит труда понять и освоить, он практики не предоставит. Какой язык выбрать вместо... конечно Плюсы. Я не знаю ещё одного языка, на грамматике которого можно легко реализовать такое огромное множество теоретических паттернов (я сейчас не за GoF или что-либо подобное), особенно вкупе с поддержкой со стороны Стандартной библиотеки. Плюс к этому ещё то, что его не требуется знать глубоко, чтобы писать хорошие приложения. Даже имея лишь базовую теоретическую подготовку и базовые же, изучаемые буквально за минуты, синтаксические конструкции, можно писать эффективные решения в рамках изученного материала. Даже о Java сказать того же нельзя, там сразу уже надо знать гораздо больше, чтоб хоть что-то работающее написать. Конечно, изучать Плюсы во всю глубину нужно долго, но это если такую цель перед собой ставить, вопрос лишь в том, а надо ли. И ответить на этот вопрос может для себя каждый студен сам, язык не принуждает. Будущее за языками высокого уровня. Языки типа плюсов займут свою нишу - системное программирование. Только сишники и будут знать, как сортировку написать. Добавлено Хотела отсортировать список по убыванию: a[:] = sorted(a[::-1]) Нет, всё равно по возрастанию Добавлено Ну как-то так, на первый случай операции со списками https://py3.codeskulptor.org/#user305_IQVPcuka0U_0.py |