我有两个列表-:
a=[1,5,3,4,25,6]
和
b=[10,25,3]
现在我想要这种输出
b =[10,25,3,None,None,None]
要获得此输出,我使用了
for x,y in itertools.zip_longest(a,b):
但是,这对我没有帮助。如何获得所需的输出?
之后,我想给它一个列表的大小,我们添加零或无都没关系,最后我希望两个列表的大小都相同
任何帮助将不胜感激。
答案 0 :(得分:4)
你很近。您绝对可以使用zip_longest
来获得所需的输出:
from itertools import zip_longest
a = [1, 5, 3, 4, 25, 6]
b = [10, 25, 3]
[y for _, y in zip_longest(a, b)]
# [10, 25, 3, None, None, None]
一个不同的选项,它不必不必要地产生压缩对,而只丢弃其中的一对,则可以使用迭代器和next
:
it = iter(b)
[next(it, None) for _ in range(len(a))]
# [10, 25, 3, None, None, None]
答案 1 :(得分:2)
我会做
>>> b += [None]*(len(a) - len(b))
>>> b
[10, 25, 3, None, None, None]
我要向其中传递4个列表,然后将
None
添加到比最长列表短的每个列表中,可以吗?
建立新列表(不可变):
>>> lists = [[1,5,3,4,25,6], [10,25,3], [], [1, 2]]
>>> max_len = max(map(len, lists))
>>> [l + [None]*(max_len - len(l)) for l in lists]
[[1, 5, 3, 4, 25, 6],
[10, 25, 3, None, None, None],
[None, None, None, None, None, None],
[1, 2, None, None, None, None]]
使用itertools.zip_longest
(不变):
>>> list(map(list, zip(*zip_longest(*lists))))
[[1, 5, 3, 4, 25, 6],
[10, 25, 3, None, None, None],
[None, None, None, None, None, None],
[1, 2, None, None, None, None]]
交互版本:
>>> max_len = max(map(len, lists))
>>> for l in lists:
...: l.extend([None]*(max_len - len(l)))
...:
>>> lists
[[1, 5, 3, 4, 25, 6],
[10, 25, 3, None, None, None],
[None, None, None, None, None, None],
[1, 2, None, None, None, None]]