我有一些元素的列表,例如 [1, 2, 3, 4]
和一个对象,例如 'a'
。我想生成一个元组列表,列表的元素位于第一个位置,单个对象位于第二个位置: [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]
。
我可以用 zip
这样做:
def zip_with_scalar(l, o): # l - the list; o - the object
return list(zip(l, [o] * len(l)))
然而,这给我一种创建和不必要的重复元素列表的感觉。
另一种可能性是
def zip_with_scalar(l, o):
return [(i, o) for i in l]
这确实非常干净和pythonic,但在这里我“手动”完成了整个事情。在哈斯克尔我会做类似的事情
zipWithScalar l o = zip l $ repeat o
是否有任何内置函数或技巧,无论是用于标量压缩还是用于使我能够使用普通 zip 的东西,即某种无限列表?
原文由 zegkljan 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是最接近您的 Haskell 解决方案的方法:
您还可以使用生成器,它避免像推导式那样创建列表: