我有两个清单
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_longest
用None
s(或您作为fillvalue=
参数传递的任何值)填充较短的可迭代项。如果这不是您想要的,则可以使用一种理解来过滤None
s:
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开始,可以通过以下方式实现: