Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2021, 17:56   #1
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию Помогите разобраться в функции

Проходил задание на кодварс. В итоге не смог сделать, нашел ответ. Но я все равно не могу понять почему i сравнивается с нулем. Если убрать это сравнение то задание не выполняется.
Само задание скину на скрине.

Код:
def unique_in_order(iterable):
    chars = []
    for i in range(len(iterable)):
        if i == 0 or iterable[i] != iterable[i-1]:
            chars.append(iterable[i])
    return chars
Изображения
Тип файла: png Screenshot_1.png (13.8 Кб, 22 просмотров)
RayOver вне форума Ответить с цитированием
Старый 21.07.2021, 18:01   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от RayOver Посмотреть сообщение
Но я все равно не могу понять почему i сравнивается с нулем.
Код:
iterable[i] != iterable[i-1]:
Какие элементы будут сравниваться при i = 0?
ForenLi вне форума Ответить с цитированием
Старый 21.07.2021, 18:06   #3
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию

ForenLi, а, ну да, спасибо)
RayOver вне форума Ответить с цитированием
Старый 21.07.2021, 19:27   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Мне вопрос понравился.
Вот решение.
Код:
def unique_in_order(iterable):
    chars = [iterable[0]]                      # Инициируем начальным элементом
    k = 0                                      # Число элементов, счёт от нуля
    for i in range(1, len(iterable)):          # Для всех следующих элементов
        if chars[k] != iterable[i]:            # Последний добавленный элемент <> следующему
            chars.append(iterable[i])          # Добавим
            k += 1                             # Увеличим число элементов
    return chars
Подобные вопросы были в тестах ЕГЭ 2021, но там сложнее, поскольку требовалось несовпадение тройной последовательности или найти наиболее длинную последовательность, в которой соседние элементы разные. Данные находились в файле размером около мегабайта.

Добавлено:
Сообразил поздновато, но всё же, оставаясь в рамках предложенного выше решения:
Код:
def unique_in_order(iterable):
    chars = [iterable[0]]
    for i in range(1, len(iterable)):
        if iterable[i - 1] != iterable[i]:
            chars.append(iterable[i])
    return chars
Как-то так, ...

Последний раз редактировалось ViktorR; 22.07.2021 в 08:01.
ViktorR вне форума Ответить с цитированием
Старый 21.07.2021, 19:48   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Или:
Код:
def unique_in_order(iterable):
    it = iter(iterable)
    chars = [next(it)]
    for i in it:
        if i != chars[-1]:
            chars.append(i)
    return chars
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с параметрами функции из dll Fakov Общие вопросы Delphi 7 04.08.2018 11:53
Помогите разобраться der90 PHP 2 19.02.2014 00:46
Обработать матрицу, элементами которой являются случайные значения функции. не могу разобраться с курсовой nastya_love Паскаль, Turbo Pascal, PascalABC.NET 14 31.05.2013 02:11
Не могу разобраться в функции. Вовастый Visual C++ 0 21.12.2012 22:15
Вызов из Delhpi функции из API-шки, сделанной в С++. Помогите разобраться Bobby Win Api 1 31.03.2009 18:54