ПОМОГИТЕ С ПИТОНОМ!!!
программа должна удалить все дублирыванные числа с массива, а потом написать весь массив без дублирванных чисел в правильном порядке
использвать : def
не использвать : функцию sort или другие похожие функции
Ответы на вопрос
Довольно интересное задание, нужно подумать и не запутаться. Необычно для школьных домашек.
Ответ:
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)
rang = int(input("Введите длину списка:\n")) # задаём диапазон (длину)
for r in range(rang): # повторяем ввод циклом нужное кол-во раз
l.append(int(input("Введите число:\n")))