python3中zip的替代方案?

2024-10-04 01:34:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: infromimportforlongestif方案result
2条回答

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

(如果在上面的表达式中用max替换min,则得到zip。)

如果要打印不带最外层[...]的结果:

>>> print(', '.join(map(str, _)))                                          
[['ele1'], ['ele4']], [['ele_2'], ['ele_5']], [['ele_3']]

相关问题 更多 >