带有单个元素的 zip 列表

新手上路,请多包涵

我有一些元素的列表,例如 [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 许可协议

阅读 646
2 个回答

这是最接近您的 Haskell 解决方案的方法:

 import itertools

def zip_with_scalar(l, o):
    return zip(l, itertools.repeat(o))

您还可以使用生成器,它避免像推导式那样创建列表:

 def zip_with_scalar(l, o):
    return ((i, o) for i in l)

原文由 kirbyfan64sos 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用内置的 map 函数:

 >>> elements = [1, 2, 3, 4]
>>> key = 'a'
>>> map(lambda e: (e, key), elements)
[(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]

原文由 ahmed 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题