gpt4 book ai didi

python - 列表理解问题

转载 作者:太空狗 更新时间:2023-10-30 00:52:14 26 4
gpt4 key购买 nike

有没有办法在每次迭代的列表理解中将多个项目添加到列表中?例如:

y = ['a', 'b', 'c', 'd']
x = [1,2,3]

return [x, a for a in y]

输出:[[1,2,3], 'a', [1,2,3], 'b', [1,2,3], 'c', [1,2, 3], 'd']

最佳答案

肯定有,但不是简单的列表理解:

编辑:受另一个答案启发:

y = ['a', 'b', 'c', 'd']
x = [1,2,3]

return sum([[x, a] for a in y],[])

它是如何工作的:只要有 __add__ 成员来做这项工作,sum 就会添加一系列的任何东西。但是,它以初始总数 0 开始。您不能将 0 添加到列表中,但可以为 sum() 提供另一个起始值。这里我们使用一个空列表。

如果您不需要实际的列表,而只需要一个生成器,您可以使用 itertools.chain.from_iterable,它只是将一堆迭代器串成一个长迭代器。

from itertools import *

return chain.from_iterable((x,a) for a in y)

或更友好的 itertools:

return itertools.chain.from_iterable(itertools.izip(itertools.repeat(x),y))

当然还有其他方法:首先,我们可以改进 Adam Rosenfield 的 answer通过消除不需要的 lambda 表达式:

return reduce(list.__add__,([x, a] for a in y))

因为 list 已经有一个成员可以完全满足我们的需要。我们可以使用 maplist.extend 中的副作用实现相同的效果:

l = []
map(l.extend,[[x, a] for a in y])
return l

最后,让我们尝试一个尽可能不优雅的纯列表理解:

return [ y[i/2] if i%2 else x for i in range(len(y)*2)]

关于python - 列表理解问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com