С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.01.2022
Сообщений: 16

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

18.10.2022, 01:36. Показов 607. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Нужно выполнить задание, но сталкиваюсь с ошибками в коде для remove и insert функций. Не понимаю в чем дело. Insert должна вставлять данные в список таким образом, чтобы список оставался отсортированным. А remove находит и удаляет узел, содержащий дату из списка. Если узел, содержащий данные, был найден и удален, функция возвращает значение True. Если такой узел не был найден (даты не было в списке), функция возвращает значение False.

Тестовый код приложил.

a1.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class SortedList:
    class Node:
        
 
        def __init__(self, data=None):
            self.data = data
            self.next = None
            self.prev = None
 
 
    def __init__(self):
        self.front = None
        self.back = None
        self.count = 0
 
 
    def insert(self,data):  
        n = SortedList.Node(data)
    
        if self.front is None:    
            self.front  = n
            self.back  = n
        else:  
            n.prev = self.back 
            self.back .next = n    
            self.back  = n         
        self.count += 1
 
    def remove(self,data):
        curr = self.front
        deleted_fl = False
        if curr is None:  
            pass
        elif curr.data == data:  
            self.front = curr.next
            if self.front is not None: 
                self.front.prev = None  
                deleted_fl = True
            elif self.back.data == data: 
                self.back = self.back.prev
                self.back.next = None
                deleted_fl = True
            else: 
                while curr:
                    if curr.data == data:
                        curr.prev.next = curr.next
                        curr.next.prev = curr.prev
                        deleted_fl = True
                    curr = curr.next
            if deleted_fl:
                self.count -= 1
            return deleted_fl
test_a1.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import unittest
from a1 import SortedList
 
class A1TestCase(unittest.TestCase):
    """These are the test cases for functions and classes """
    
 
    def test_insert(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        my_data2 = ["orange", "apple", "cherry", "banana", "mango","pear","plum"]
        first_list = SortedList()
        second_list = SortedList()
        for i in my_data:
            first_list.insert(i)
 
        for i in my_data2:
            second_list.insert(i)
 
        my_data.sort()
        my_data2.sort()
        j = 0
        for i in first_list:
            self.assertEqual(i,my_data[j])
            j+=1
 
        self.assertEqual(j,len(my_data))
 
        j = 0
        for i in second_list:
            self.assertEqual(i,my_data2[j])
            j+=1
 
        self.assertEqual(j,len(my_data2))
 
        j = len(my_data) - 1
        for i in reversed(first_list):
            self.assertEqual(i,my_data[j])
            j-=1
 
        j = len(my_data2) - 1
        for i in reversed(second_list):
            self.assertEqual(i,my_data2[j])
            j-=1
 
 
 
    def test_len(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        my_data2 = ["orange", "apple", "cherry", "banana", "mango","pear","plum"]
        first_list = SortedList()
        second_list = SortedList()
        j=0
        for i in my_data:
            first_list.insert(i)
            j+=1
            self.assertEqual(len(first_list),j)            
 
        j=0
        for i in my_data2:
            second_list.insert(i)
            j+=1
            self.assertEqual(len(second_list),j)            
 
 
 
    def test_remove(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        sorted_data = [4,8,6,7,1,3,5,10,15,2,9]
        sorted_data.sort()
 
        first_list = SortedList()
 
        for i in my_data:
            first_list.insert(i)
 
        for i in my_data:
            self.assertEqual(first_list.remove(i),True)
            sorted_data.remove(i)
            self.assertEqual(len(first_list),len(sorted_data))
 
            j = 0
            for k in first_list:
                self.assertEqual(k,sorted_data[j])
                j+=1
 
            j = len(sorted_data) - 1
            for k in reversed(first_list):
                self.assertEqual(k,sorted_data[j])
                j-=1
 
 
 
    def test_is_present(self):
        my_data = [4,8,6,7,1,3,5,10,15,2,9]
        my_data2 = ["orange", "apple", "cherry", "banana", "mango","pear","plum"]
        not_present = [16, 11, 12, 25,100]
        not_present2 = ["lichee", "peach", "watermelon", "grape"]
        first_list = SortedList()
        second_list = SortedList()
        for i in my_data:
            first_list.insert(i)
 
        for i in my_data2:
            second_list.insert(i)
 
        for i in my_data:
            self.assertEqual(first_list.is_present(i),True)
 
        for i in my_data2:
            self.assertEqual(second_list.is_present(i),True)
 
        for i in not_present:
            self.assertEqual(first_list.is_present(i),False)
 
        for i in not_present2:
            self.assertEqual(second_list.is_present(i),False)
 
 
 
 
if __name__ == '__main__':
    unittest.main()
Ошибка видна скриншоте
Миниатюры
Вставить данные в список таким образом, чтобы список оставался отсортированным  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2022, 01:36
Ответы с готовыми решениями:

Сформировать односвязный список так, чтобы после вставки каждого нового значения, список оставался отсортированным по возрастанию
сформировать односвязный список целочисл знач, таким образом чтобы после вставки каждого нового значения, список оставался отсортированным...

Вставить в непустой список новый элемент таким образом, чтобы сохранилась упорядоченность
Использовать таблицу 2.2. Дополнительно написать функцию, которая вставляет в непустой список, элементы которого упорядочены по...

в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным
Помогите пожалуйста! Как мне сделать задачу на C++ в win32. В Dos я ее сделал, а вот как сделать ее не в Dos я не знаю. Вот сама задача: ...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
18.10.2022, 08:25
evgeniyrus, метод insert должен содержать итерационный цикл или рекурсию. У тебя нет ни того, ни другого. Этот код не может быть правильным.

Добавлено через 20 минут
Вот набросал сортированный односвязный список. У тебя код должен быть сложнее

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Node:
    def __init__(self,val):
        self.value=val
        self.next=None
        
class Sorted_list:
    def __init__(self):
        self.start=None
        
    def insert(self,val):
        curr=self.start
        if curr is None:
            self.start=Node(val)
            return
        if curr.next is None:
            if curr.value >= val:
                if curr.value >= val:
                    self.start=Node(val)
                    self.start.next=curr
                else:    
                    curr.next=Node(val)
            return
        while True:
            if curr.next is None:
                curr.next=Node(val)
                return
            if curr.next.value >= val:
                q=Node(val)
                q.next=curr.next
                curr.next=q
                return
            curr=curr.next
            
    def print(self):
        curr=self.start
        while not (curr is None):
            print(curr.value)
            curr=curr.next
        
        
lst=Sorted_list()
lst.insert(7)
lst.insert(-7)
lst.insert(0)
lst.insert(9)
lst.insert(11)
lst.insert(10)
lst.print()
0
0 / 0 / 0
Регистрация: 22.01.2022
Сообщений: 16
18.10.2022, 08:48  [ТС]
Спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2022, 08:48
Помогаю со студенческими работами здесь

в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным
Подскажите, что не так делаю: Задание: Дан одномерный массив длиной N. Массив заполняется датчиком случайных чисел (лучше использовать...

Изменить список таким образом, чтобы все цены оказались в рублях
Дан список - цены товаров, которые Аркадий заказал в одном американском магазине. Новое компьютерное кресло, подставка под ноутбук, вебка и...

Список: Упорядочить элементы списка таким образом, чтобы все гласные были в начале
Здравствуйте. Нужно создать односвязный список из псевдослучайных символов от А до Я, упорядочив элементы таким образом, чтобы все...

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

Преобразовать список таким образом, чтобы в начале были расположены нули, а потом – положительные числа
При этом использование встроенных функций не допускается, считается, что списки имеют двухуровневую структуру Добавлено через 46 минут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru