迭代两个列表中递增的值

4

我有两个列表:

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 = 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

但这导致其中一个列表的末尾出现了 Keyerror 错误。

欢迎来到SO!如果您需要建议,请查看[tour]和[ask]。您正在学习Python吗?如果是,为什么要学习Python 2?它已于一月份结束生命周期。 - wjandrea
1
请查看heapq.merge。例如,print(*heapq.merge(a, b), sep=', ') - Andrej Kesely
如果两个值相等怎么办? - wjandrea
4个回答

2

将它们合并,然后对结果进行排序:

c = sorted(a + b)

0
我认为zip就是你想要的。
for aa ,bb in zip(a, b):
    print(f'{aa},{bb}')

一开始我也是这么想的,但在期望的输出中,它变成了5、6、8而不是5、8、6。 - wjandrea
你可以对结果进行排序。 - Kenan
你是指像 aa, bb = sorted(aa, bb) 这样的东西吗?那不会有任何区别。 - wjandrea
以上,sorted(a + b)。我正在回答如何同时迭代两个列表。 - Kenan

0

你只需要使用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

正如Andrej所评论的那样,你可以使用heapq.merge:

>>> import heapq
>>> print(*heapq.merge(a, b))
0 2 3 4 5 6 8 9 10 12 14 17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接