Информатика, вопрос задал 20Monika11 , 2 года назад

ПОМОГИТЕ С ПИТОНОМ!!!

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

использвать : def
не использвать : функцию sort или другие похожие функции

Ответы на вопрос

Ответил AleksejVer
1

Довольно интересное задание, нужно подумать и не запутаться. Необычно для школьных домашек.


Ответ:

def double_remove(arr):

   # убираем дубли методом создания нового списка без дублей через генератор с условием

   arr2 = []

   [arr2.append(x) for x in arr if x not in arr2]

   # возвращаем список с результатом

   return arr2


def custom_sort(l):

   # создаем новый результирующий список, методом добавления в которой и будем производить сортировку

   arr2 = []

   # перебираем список

   for el in l:

       # если новый список еще пуст, кидаем в него первое значение; также если последний элемент списка (то есть самый большой по значению) меньше элемента текущей итерации, то кидаем элемент нашей итерации в конец нового списка (зачем тут думать? он будет заведомо наибольшим)

       if len(arr2) == 0 or arr2[-1] < el:

           arr2.append(el)

       else:

           # если список не пуст и последний его элемент не меньше нашего, тогда нужно перебрать его элементы. И при нахождении первого элемента, который превосходит наш, поставить на его место наш элемент (а больший элемент таким образом «уйдёт вверх» и получит следующий индекс)

           # функция enumerate(), грубо говоря, представляет список в виде пар «индекс:значение», чтобы при переборе можно было легко получить индекс элемента текущей итерации. Индекс — это порядковый номер элемента в списке.

           for index, el2 in enumerate(arr2):

               if el2 > el:

                   arr2.insert(index, el)

                   # если место элементу нашли, прерываем перебор

                   break

   # возвращаем результирующий список

   return arr2

l = [2, 5, 2, 8, 1, 9, 4, 2, 7, 6]

# удаляем дубли, сортируем, выводим

l = double_remove(l)

l = custom_sort(l)

print(*l)

Вариант через циклы While:


def  double_remove(arr):

   arr2, i = [], 0   # помимо нового массива для сортировки, объявляем ещё и переменную для хранения номера итерации (индекса)

   # цикл работает, пока (while) индекс не выходит за пределы перебираемого списка

   while(i <= len(arr) - 1):

       if arr[i] not in arr2:

           arr2.append(arr[i])

       i += 1

   return arr2

def custom_sort(l):

   arr2, i = [], 0

   while(i <= len(l) - 1):

       if len(arr2) == 0 or arr2[-1] < l[i]:

           arr2.append(l[i])

       else:

           i2 = 0

           while(i2 <= len(arr2) - 1):

               if arr2[i2] > l[i]:

                   arr2.insert(i2, l[i])

                   break

               i2 += 1

       i += 1

   return arr2


l = [2, 5, 2, 8, 1, 9, 4, 2, 7, 6]

l = double_remove(l)

l = custom_sort(l)

print(*l)


AleksejVer: Скорее всего это именно ты не учила, а твой класс учил ;) А цикл while ты помнишь?
AleksejVer: Добавил вариант через циклы while. Без циклов вообще эту задачу решить невозможно (не используя «запретные» функции).
20Monika11: нет, класс не учил, мы все в месте учим
20Monika11: да, конечно помню while
20Monika11: а можешь добавить def?? я не знаю как его добавить к этому коду
AleksejVer: def — это инструкция, определяющая функцию. Мой код сделан через функции, следовательно и def там есть. Смотри внимательно.
20Monika11: Аааа оооой не увидела, СПАСИБКИ!
20Monika11: кстати, там ты даешь сразу все цифры, а надо с инпут, так напишешь? + заработаешь б
AleksejVer: l = []
rang = int(input("Введите длину списка:\n")) # задаём диапазон (длину)
for r in range(rang): # повторяем ввод циклом нужное кол-во раз
l.append(int(input("Введите число:\n")))
AleksejVer: перед четвёртой строчкой 4 пробела.
Новые вопросы