首页 > 解决方案 > python 3中zip的替代品?

问题描述

python 3中zip的替代品?

from itertools import zip_longest 
list_1 = [["ele1"],["ele_2"],["ele_3"]]
list_2 = [["ele4"],["ele_5"]]

result = [[x for x in t if x is not None] for t in zip_longest(list_1,list_2)]
print(result)

我的输出为

[[['ele1'], ['ele4']], [['ele_2'], ['ele_5']], [['ele_3']]]

预期输出:

[['ele1'], ['ele4']], [['ele_2'], ['ele_5']], [['ele_3']]

标签: pythonmergeconcat

解决方案


如果你想避免使用压缩两个列表,我会这样做的方法是在try/except子句中附加两个列表中的值,并附加定义为迭代器的list_2(或者如果它是两者中最短的)的值,避免在list_1这样zip在迭代时必须同时列出两个列表:

# iterate over the longest list. Define other as iterator
l2 = iter(list_2)
out = [[] for _ in range(len(list_1))]
for ix, i in enumerate(list_1): 
    try:
        out[ix].append(i)
        out[ix].append(next(l2))
    except StopIteration:
        break

给出:

print(out)
[[['ele1'], ['ele4']], [['ele_2'], ['ele_5']], [['ele_3']]]

推荐阅读