Итерация увеличения значений в двух списках - PullRequest
4 голосов
/ 02 мая 2020

У меня есть два списка:

a = [0, 3, 5, 6, 10, 14]
b = [2, 4, 8, 9, 12, 17]

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

0, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 17

I Я возился с этим, пытаясь что-то вроде:

i = 0
j = 0
while i < len(a) or j < len(b):
    if a[i] < b[j]:
        print a[i]
        i += 1
    elif b[j] < a[i]:
        print b[j]
        j += 1

, но это приводит к ошибке в конце одного из списков.

Ответы [ 4 ]

2 голосов
/ 02 мая 2020

Объедините их и затем отсортируйте результат:

c = sorted(a + b)
0 голосов
/ 02 мая 2020

Как Андрей прокомментировал , вы можете использовать heapq.merge вместо:

>>> import heapq
>>> print(*heapq.merge(a, b))
0 2 3 4 5 6 8 9 10 12 14 17
0 голосов
/ 02 мая 2020

Вам просто нужно использовать and вместо or, а затем распечатать все, что осталось:

while i < len(a) and j < len(b):
    ...
k, remaining = (i, a) if i < len(a) else (j, b)
for x in remaining[k:]:
    print(x)
0 голосов
/ 02 мая 2020

Я думаю zip это то, что вы хотите

for aa ,bb in zip(a, b):
    print(f'{aa},{bb}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...