迭代两个不同长度的列表

pmi*_*mit 2 python loops list

我有2个不同长度的数字列表,例如:

list1 = [1, 2, -3, 4, 7]
list2 = [4, -6, 3, -1]
Run Code Online (Sandbox Code Playgroud)

我需要使用函数迭代这些:

final_list = []
for index in range(???):
    if list1[index] < 0:
        final_list.insert(0, list1[index])
    elif list1[index] > 0:
        final_list.insert(len(final_list), list1[index])
    if list2[index] < 0:
        final_list.insert(0, list2[index])
    elif list2[index] > 0:
        final_list.insert(len(final_list), list2[index])
return final_list
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚如何处理范围,因为如果我使用max长度,较短的列表将变得"超出范围" .有关如何克服这个或如何改变我的功能的任何想法?

Chr*_*nig 5

itertools.zip_longest(*iterables, fillvalue=None) 会为你做的工作:

如果迭代的长度不均匀,则使用fillvalue填充缺失值.

对于您的示例列表,这将产生:

>>> import itertools
>>> list1 = [1, 2, -3, 4, 7]
>>> list2 = [4, -6, 3, -1]

>>> for combination in itertools.zip_longest(list1, list2):
    print(combination)

(1, 4)
(2, -6)
(-3, 3)
(4, -1)
(7, None)
Run Code Online (Sandbox Code Playgroud)

如果您只想使用两个列表中存在的值,请使用内置zip():

当最短输入可迭代用尽时,迭代器停止.

>>> for combination in zip(list1, list2):
    print(combination)

(1, 4)
(2, -6)
(-3, 3)
(4, -1)
Run Code Online (Sandbox Code Playgroud)