Skip to main content
 首页 » 编程设计

python之包含多个元素的 zip 列表

2025年05月04日13Leo_wl

我正在尝试增强 zip_with_scalar逻辑。我正在尝试使用向量

压缩

到目前为止我已经做到了这一点-

import itertools 
 
def zip_with_vector(l, o): 
    if not isinstance(o, list): 
        return zip(l, itertools.repeat(o)) 
    else: 
        for e in o: 
            l = list(zip_with_vector(l, e)) 
 
    return l 
 
print(list(zip_with_vector(['a', 'b', 'c'], ['x', 'y', 'z']))) 
 
>>> [((('a', 'x'), 'y'), 'z'), ((('b', 'x'), 'y'), 'z'), ((('c', 'x'), 'y'), 'z')] 

但我想要这样 [('a', 'x', 'y', 'z'), ('b', 'x', 'y', 'z'), (' c', 'x', 'y', 'z')]

我知道我很接近但无法弄清楚递归逻辑。

请您参考如下方法:

如果你想要一个“输入列表的每个元素,与输入向量连接”的序列,那么就这样写:

 
def zip_with_vector(l, v): 
  return ((elem,) + tuple(v) 
          for elem in l) 
 
list(zip_with_vector(['a', 'b', 'c'], ['x', 'y', 'z'])) 
>>> [('a', 'x', 'y', 'z'), ('b', 'x', 'y', 'z'), ('c', 'x', 'y', 'z')] 
 

如果这确实是您要查找的内容,那么我认为这里不需要递归。

正如@Georgy 在评论中提到的,这可以写得更简洁(并且可能执行得更快)因此:

def zip_with_vector(l, v): 
  return ((elem, *v) for elem in l)