python 3中zip的替代方案?

python 3中zip的替代方案?,python,merge,concat,Python,Merge,Concat,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']], [

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']]

如果要避免使用压缩两个列表,我的方法是在定义为迭代器的
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']]]

您还可以在另一个列表中收集两个(或更多)列表,并使用嵌套列表理解来模拟
zip\u longest
的行为

>>> lists = [list_1, list_2] # an also be more than two lists
>>> [[lst[i] for lst in lists if i < len(lst)]
...  for i in range(max(map(len, lists)))]
...
[[['ele1'], ['ele4']], [['ele_2'], ['ele_5']], [['ele_3']]]

预期的输出是什么?@yatu我提到过请再次查看代码您的输出和预期的输出是一样的。但是我想要zip
[['ele1']、['ele4']、['ele_2']、['ele_5']]、[['ele_3']
是元组
(['ele1']、['ele4']、['ele_2']、['ele_5']、['ele_3']))
而不是列表是的,这个想法是迭代最长的lsit@tobias_k,mayb应该让它更清晰。想不出另一种方法,尽管避免
zip\u最长的
break有一个额外的缩进
>>> print(', '.join(map(str, _)))                                          
[['ele1'], ['ele4']], [['ele_2'], ['ele_5']], [['ele_3']]