【发布时间】:2016-07-31 21:01:20
【问题描述】:
我有一些元素的列表,例如[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,但在这里我“手动”完成了整个事情。在 Haskell 中,我会做类似的事情
zipWithScalar l o = zip l $ repeat o
是否有任何内置函数或技巧,无论是使用标量压缩还是使我能够使用普通压缩,即无限列表排序?
【问题讨论】:
-
jonrsharpe 说了什么,但您可能还想将其重写为生成器,而不是常规函数。
-
@OmnipotentEntity,因为 OP 使用的是 3.x,所以他们只能
return zip(l, repeat(o));它是一个迭代器,不需要yield。 -
好点,我错过了标签。
-
小心 o 的可变值,否则你可能会得到一些惊喜
标签: python list python-3.x