您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将python中的不相等列表压缩到一个列表中,该列表不会从要压缩的较长列表中删除任何元素

将python中的不相等列表压缩到一个列表中,该列表不会从要压缩的较长列表中删除任何元素

通常,您使用itertools.zip_longest以下方法

>>> import itertools
>>> a = [1, 2, 3]
>>> b = [9, 10]
>>> for i in itertools.zip_longest(a, b): print(i)
... 
(1, 9)
(2, 10)
(3, None)

但是zip_longestNones(或您作为fillvalue=参数传递的任何值)填充较短的可迭代项。如果这不是您想要的,则可以使用一种理解来过滤Nones:

for i in (tuple(p for p in pair if p is not None) 
          for pair in itertools.zip_longest(a, b)):
    print(i)

但是请注意,如果两个可迭代对象都具有None值,则也会将其过滤掉。如果您不想这样做,请定义自己的对象fillvalue=并过滤该对象,而不是None

_marker = object()

def zip_longest_no_fill(a, b):
    for i in itertools.zip_longest(a, b, fillvalue=_marker):
        yield tuple(x for x in i if x is not _marker)

list(zip_longest_no_fill(a, b))  # [(1, 9), (2, 10), (3,)]

在Python 2上,请itertools.izip_longest改用。

python 2022/1/1 18:28:17 有356人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶