我正在尝试增强 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)
