Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向使用zip创建的迭代器添加数据_Python_Python 3.x - Fatal编程技术网

Python 向使用zip创建的迭代器添加数据

Python 向使用zip创建的迭代器添加数据,python,python-3.x,Python,Python 3.x,我正在使用python内置函数zip()组合两个列表: l1 = [1,2,3] l2 = [4,5,6] zipped = zip(l1,l2) 是否可以“添加”到此压缩对象,例如: l3 = [7,8,9] zipped2 = zipped.add(l3) zipped2 = zip(zipped,l3) 以便: list(zipped2) 将产生: [(1,4,7),(2,5,8),(3,6,9)] 例如,我试过: l3 = [7,8,9] zipped2 = zipped.ad

我正在使用python内置函数zip()组合两个列表:

l1 = [1,2,3]
l2 = [4,5,6]
zipped = zip(l1,l2)
是否可以“添加”到此压缩对象,例如:

l3 = [7,8,9]
zipped2 = zipped.add(l3)
zipped2 = zip(zipped,l3)
以便:

list(zipped2)
将产生:

[(1,4,7),(2,5,8),(3,6,9)]
例如,我试过:

l3 = [7,8,9]
zipped2 = zipped.add(l3)
zipped2 = zip(zipped,l3)
但这导致:

[((1, 4), 7), ((2, 5), 8), ((3, 6), 9)]
(这是有道理的)

一个明显的方法是先“解压”zip,然后再将其压缩到zip(),包括新的列表,但是,这对我的应用程序来说并不实用,因为我想根据一些逻辑添加可变数量的列表,所以我想知道是否已经有一些内置函数可以这样做。我检查了itertools,没有找到明显的候选人


如果有人能为我指出正确的方向,我将不胜感激。

您不能向
zip
功能添加任何内容,但您可以通过这种方式来完成(有许多选项):


一种方法是编写自己的生成器:

def add_to_zip(zipped, lst):
    for tpl, elem in zip(zipped, lst):
        yield tpl + (elem,)

zipped2 = add_to_zip(zipped, l3)
list(zipped2)
# OUT: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
如果要将其扩展到任意数量的列表:

def add_to_zip2(zipped, *lists):
    for tpl, *elems in zip(zipped, *lists):
        yield tpl + tuple(elems)

zipped3 = add_to_zip2(zipped, l3, l2)
list(zipped3)
# OUT: [(1, 4, 7, 4), (2, 5, 8, 5), (3, 6, 9, 6)]

如果此时您已经压缩了
但没有源代码
l1
l2
,则必须解压缩压缩的
zip
,添加
l3
列表并再次压缩:

>>> zip(*(zip(*zipped) + [l3]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

如果此时仍有
l1
l2
,只需执行
zip(l1、l2、l3)

任何不执行
zip(l1、l2、l3)的原因
首先?是的,l1和l2是在算法中的不同位置创建的,我正在寻找一种通用解决方案,您可以在其中动态添加n个列表。如果此答案符合您的标准,请批准此答案:感谢所有人提供快速答案!这些东西真的帮助我提高了,我还会看看其他建议的方法。