当前位置: 首页 > 面试题库 >

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

龚弘业
2023-03-14
问题内容

我有两个清单

a = [1,2,3]
b = [9,10]

我想将这两个列表合并(压缩)到一个列表中c,这样

c = [(1,9), (2,10), (3, )]

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是否为我想做的事情内置了任何东西。 我正在做的是这个。我有一个列表,并且我有一个接受项目并返回列表的函数。我可以使用列表推导来转换所有内容,例如: 但这返回一个列表列表; 我真正想要的是获取扁平化的列表; 现在,其他语言也有它。传统上用函数式编程语言来称呼它,而.Net称它为。python有类似的东西吗?有没有一种巧妙的

  • Ziplist 是由一系列特殊编码的内存块构成的列表, 一个 ziplist 可以包含多个节点(entry), 每个节点可以保存一个长度受限的字符数组(不以 \0 结尾的 char 数组)或者整数, 包括: 字符数组 长度小于等于 63 ()字节的字符数组 长度小于等于 16383 () 字节的字符数组 长度小于等于 4294967295 ()字节的字符数组 整数 4 位长,介于 0 至 12 之

  • 问题内容: 我认为“解压”可能是错误的词汇-抱歉,我确定这是一个重复的问题。 我的问题很简单:在一个需要项目列表的函数中,如何在不出错的情况下传递Python列表项目? 当然,必须有一种方法来扩展列表,并在蹄上传递函数吗? 问题答案:

  • 问题内容: 使用Google Guava(Google Commons),是否可以将两个大小相等的列表合并为一个列表,而新列表包含两个输入列表的复合对象? 例: 和 将输出: 问题答案: 从Guava 21开始,可以通过以下方式实现: