以相反的顺序迭代2个不同长度的列表

时间:2014-01-25 10:04:55

标签: python list python-2.7

我有两个项目列表,我不知道它们的长度,但它不一定相同。我需要将它们的项目按相反顺序添加到另一个列表中。因此list1中的最后一项与list2中的最后一项配对。两个列表中的第一项只有在长度相同时才会配对。

我不知道如何在Python和其他语言中这样做很容易。这是我到目前为止所尝试的,但它不起作用:

blocks = []
list = list1
if len(list2) > len(list1):
    list = list2
r_list1 = reversed(list1)
r_list2 = reversed(list2)

for i, not_used in enumerate(list):
    blocks.append([
        r_list1[i] if len(r_list1) > i else None,
        r_list2[i] if len(r_list2) > i else None,
    ])

2 个答案:

答案 0 :(得分:1)

使用itertools.izip_longest

>>> import itertools
>>> lst1 = [1,2,3,4]
>>> lst2 = [5,6,7]

>>> itertools.izip_longest(reversed(lst1), reversed(lst2))
<itertools.izip_longest object at 0x0000000002D13228>

>>> list(itertools.izip_longest(reversed(lst1), reversed(lst2)))
[(4, 7), (3, 6), (2, 5), (1, None)]

>>> map(list, itertools.izip_longest(reversed(lst1), reversed(lst2)))
[[4, 7], [3, 6], [2, 5], [1, None]]

如果您需要其他值而不是None,请使用fillvalue关键字参数:

>>> list(itertools.izip_longest(reversed(lst1), reversed(lst2), fillvalue=999))
[(4, 7), (3, 6), (2, 5), (1, 999)]

答案 1 :(得分:0)

这对你有用吗?

a = [1,2,3,4,5]
b = [55,44,33,22]
zip(a[::-1], b[::-1])

输出

[(5, 22), (4, 33), (3, 44), (2, 55)]