Объедините два отсортированных списка. Сделайте всю работу внутри цикла while - PullRequest
0 голосов
/ 12 июля 2019

Слияние двух отсортированных списков. Делайте всю работу внутри цикла while. Не используйте удлинитель.

Я могу объединить два отсортированных списка, но я не делаю всю работу внутри цикла while.

L1 = [ 9, 12, 17, 25 ]
L2 = [ 3, 5, 11, 13, 16 ]



i1 = 0 # index of value in L1 that has not yet been copied.
i2 = 0 # index of value in L2 that has not yet been copied.
L = []

while i1 < len(L1) and i2 < len(L2):
    if L1[i1] < L2[i2]:
        L.append(L1[i1])
        i1 += 1

    else:
        L.append(L2[i2])
        i2 += 1

if i1 == len(L1):
    for val in L2[i2:]:
        L.append(val)
else:
    for val in L1[i1:]:
        L.append(val)

print(L)

Ожидаемый результат:

[3, 5, 9, 11, 12, 13, 16, 17, 25]

Ответы [ 4 ]

0 голосов
/ 18 июля 2019

Если это не домашняя работа, где вам нужно создать собственное решение, просто используйте библиотеку heapq, которая поставляется с Python:

import heapq

list1 = [ 9, 12, 17, 25 ]
list2 = [ 3, 5, 11, 13, 16 ]
merged = list(heapq.merge(list1, list2))
print(merged)

Функция heapq.merge может объединять несколько списков,не только 2. Предполагается, что каждый список уже отсортирован, как в данном случае.Возвращаемое значение - генератор, поэтому нам нужно вызвать list( ... ), чтобы превратить этот генератор в список.

0 голосов
/ 12 июля 2019

Не уверен, если вы хотите, чтобы это было сделано просто, но я просто добавил весь список list1 в список list2, а затем отсортировал список list2 с помощью функции sort

L1 = [ 9, 12, 17, 25 ]
L2 = [ 3, 5, 11, 13, 16 ]

for i in L1:
    L2.append(i)

L2.sort()

print(L2)
0 голосов
/ 12 июля 2019

Это мой первый ответ, так что я надеюсь, что все в порядке.

L1 = [ 9, 12, 17, 25 ]
L2 = [ 3, 5, 11, 13, 16 ]

i1 = 0 # index of value in L1 that has not yet been copied.
i2 = 0 # index of value in L2 that has not yet been copied.
L = []

while i1 < len(L1) or i2 < len(L2):

    if i1 == len(L1) :
        L.extend(L2[i2:])
        break

    if i2 == len(L2) :
        L.extend(L1[i1:])
        break

    if L1[i1] <= L2[i2] :
        L.append(L1[i1])
        i1 += 1

    if L2[i2] < L1[i1] :
        L.append(L2[i2])
        i2 += 1
0 голосов
/ 12 июля 2019
L1 = [ 9, 12, 17, 25 ]
L2 = [ 3, 5, 11, 13, 16 ]



i1 = 0 # index of value in L1 that has not yet been copied.
i2 = 0 # index of value in L2 that has not yet been copied.
L = []

while i1 < len(L1) or i2 < len(L2):
    if i1 == len(L1):
        L.extend(L2[i2:])
        i2 = len(L2)
    elif i2 == len(L2):
        L.extend(L1[i1:])
        i1 = len(L2)
    else:
        if L1[i1] < L2[i2]:
            L.append(L1[i1])
            i1 += 1

        else:
            L.append(L2[i2])
            i2 += 1

print(L)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...