Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 17.07.2023
Сообщений: 13

Слияние сортированных списков с удалением дубликатов

30.08.2023, 09:22. Показов 8876. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Подскажите, пожалуйста!

Вы работаете в команде разработки программного обеспечения для компании, которая занимается обработкой и анализом данных. Ваша команда получает данные из различных источников, вам нужно объединить их в один отсортированный список для дальнейшей обработки. Однако источники данных возвращают отсортированные списки с возможными дубликатами, и ваша задача — создать программу, которая объединит эти списки в один отсортированный список без дубликатов.

Задача
Напишите программу, которая объединяет два отсортированных списка целых чисел в один отсортированный список без дубликатов.

Пример:

Python
1
2
3
4
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 5, 6, 8, 10]
merged = merge_sorted_lists(list1, list2)
print(merged)
Вывод в консоли:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2023, 09:22
Ответы с готовыми решениями:

Выполнить слияние двух сортированных по возрастанию файлов с числами в третий упорядоченный по возрастанию файл
Здравствуйте, помогите пожалуйста написать код, ибо с этой темой у меня очень туго, а времени осталось до 5 часов( Задание: Есть два...

Подстановка с 2-х листов на 3-ий с удалением дубликатов
Добрый день. Подскажите пожалуйста. Есть файл, где в таблицах с 2 листов (источник1 и источник2) необходимо выбирать отмеченные желтым...

Подстановка с 3-х листов на 4-ый с удалением дубликатов
Доброго времени суток. Извиняюсь, что выкладываю заново вопрос. Подскажите пожалуйста... У меня возникла загвоздка с кодом....

8
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38176 / 21111 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
30.08.2023, 10:06
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
def merge(list1,list2):
    res=[]
    sz1=len(list1)
    sz2=len(list2)
    i1=0
    i2=0
    sz=0
    while True:
        if i1>=sz1:
            for i in range(i2,sz2):
                a=list2[i]
                if sz==0 or res[-1] != a:
                    res.append(a)
                    sz+=1
            return res
        if i2>=sz2:
            for i in range(i1,sz1):
                a=list1[i]
                if sz==0 or res[-1] != a:
                    res.append(a)
                    sz+=1
            return res
        a=list1[i1]
        b=list2[i2]
        if a<b:
            if sz==0 or res[-1] != a:
                res.append(a)
                sz+=1
            i1+=1
        if b<a:
            if sz==0 or res[-1] != b:
                res.append(b)
                sz+=1
            i2+=1
        if a==b:
            if sz==0 or res[-1] != b:
                res.append(b)
                sz+=1
            i2+=1
            i1+=1
            
x1=[1,1,2,2,4,5,5,5,6,6,7,8,9]
x2=[-1,-1,0,0,1,2,3,7,8,9,9,9]
 
x=merge(x1,x2)
 
print(x)
1
33 / 28 / 8
Регистрация: 17.02.2014
Сообщений: 122
30.08.2023, 12:52
Лучший ответ Сообщение было отмечено Andrew83 как решение

Решение

Python
1
2
3
4
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 5, 6, 8, 10]
merged = sorted(list(set(list1 + list2)))
print(merged)
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
30.08.2023, 12:53
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def move(a, b ,arr_A, arr_B, res):
    while a < len(arr_A) and (b == len(arr_B) or arr_A[a] <= arr_B[b]):
        if not res or res[-1] != arr_A[a]:
            res.append(arr_A[a])
        a += 1
    return a
 
def merge_sorted_lists(arr_A, arr_B):
    a = b = 0
    res = []
    while not res or res[-1] != max(arr_A[-1], arr_B[-1]):
        a = move(a, b ,arr_A, arr_B, res)
        b = move(b, a ,arr_B, arr_A, res)
    return res
 
A = [1,1,2,2,4,5,5,5,6,6,7,8,9,110,200,310,1000]
B = [-1,-1,0,0,1,7,8,9,9,9,100,210,300,2000]
res = merge_sorted_lists(A, B)
print(res)
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38176 / 21111 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
31.08.2023, 08:41
z_z, плохое решение... Представь, что каждый массив по миллиону элементов. Незачёт.
2
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
31.08.2023, 08:59
Цитата Сообщение от Catstail Посмотреть сообщение
z_z, плохое решение... Представь, что каждый массив по миллиону элементов.
И вообще игнорит условие, что списки уже отсортированы
2
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
31.08.2023, 20:42
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from heapq import merge
 
 
def merge_sorted_lists(list1, list2):
    merged = merge(list1, list2)
    result = []
    for x in merged:
        if result and result[-1] != x or not result:
            result.append(x)
    return result
    
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 5, 6, 8, 10]
merged = merge_sorted_lists(list1, list2)
print(merged)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
31.08.2023, 23:04
Arsegg, на полпути остановились)

Python
1
2
3
4
5
6
7
8
9
10
from heapq import merge
from itertools import groupby 
    
def merge_sorted_lists(list1, list2):
    return list(map(lambda x: x[0], groupby(merge(list1, list2))))
    
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 5, 6, 8, 10]
merged = merge_sorted_lists(list1, list2)
print(merged)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
01.09.2023, 17:06
Цитата Сообщение от Red white socks Посмотреть сообщение
на полпути остановились)
Действительно) Забыл про фишку itertools.groupby)
Слегка в Pythonic вид привел:
Python
1
2
3
4
5
6
7
8
9
10
11
12
from heapq import merge
from itertools import groupby 
    
 
def merge_sorted_lists(list1, list2):
    return [x for x, _ in groupby(merge(list1, list2))]
 
    
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 5, 6, 8, 10]
merged = merge_sorted_lists(list1, list2)
print(merged)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2023, 17:06
Помогаю со студенческими работами здесь

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

Сортировка цифр в одной ячейки с последующим удалением дубликатов
Добрый день, помогите, необходимо отсортировать последовательность цифр в ОДНОЙ ячейки (пример 284,365,845,284,983,130) по возрастанию...

Поиск дубликатов в двух массивах с последующим удалением их из виртуального массива
На одном листе есть две таблицы разделенные несколькими строками - это и есть 2 массива. Нужно проверить дублирующиеся значения между ними,...

Вывод дубликатов с последующим удалением из загружаемой таблицы SQL запросом
Уважаемые Гуру, прошу Вашей помощи, уже неделю пытаюсь решить проблему. По форуму странствовал и подобия не нашёл, может и плохо искал в...

Писк дубликатов в первом столбце, и слияние данных из второго столбца
Здравствуйте, уважаемые форумчане. Прошу помочь с решением комплексной задачи в Excel. Во вложенном файле, в таблице &quot;Дано&quot;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru