当前位置: 首页 > 面试题库 >

列表理解:为每个项目返回两个(或更多)项目

慕俊语
2023-03-14
问题内容

是否可以为列表理解中的每个项目返回2个(或更多)项目?

我想要的(示例):

[f(x), g(x) for x in range(n)]

应该回来 [f(0), g(0), f(1), g(1), ..., f(n-1), g(n-1)]

因此,可以替换以下代码块:

result = list()
for x in range(n):
    result.add(f(x))
    result.add(g(x))

问题答案:
>>> from itertools import chain
>>> f = lambda x: x + 2
>>> g = lambda x: x ** 2
>>> list(chain.from_iterable((f(x), g(x)) for x in range(3)))
[2, 0, 3, 1, 4, 4]

时间:

from timeit import timeit

f = lambda x: x + 2
g = lambda x: x ** 2

def fg(x):
    yield f(x)
    yield g(x)

print timeit(stmt='list(chain.from_iterable((f(x), g(x)) for x in range(3)))',
             setup='gc.enable(); from itertools import chain; f = lambda x: x + 2; g = lambda x: x ** 2')

print timeit(stmt='list(chain.from_iterable(fg(x) for x in range(3)))',
             setup='gc.enable(); from itertools import chain; from __main__ import fg; f = lambda x: x + 2; g = lambda x: x ** 2')

print timeit(stmt='[func(x) for x in range(3) for func in (f, g)]',
             setup='gc.enable(); f = lambda x: x + 2; g = lambda x: x ** 2')


print timeit(stmt='list(chain.from_iterable((f(x), g(x)) for x in xrange(10**6)))',
             setup='gc.enable(); from itertools import chain; f = lambda x: x + 2; g = lambda x: x ** 2',
             number=20)

print timeit(stmt='list(chain.from_iterable(fg(x) for x in xrange(10**6)))',
             setup='gc.enable(); from itertools import chain; from __main__ import fg; f = lambda x: x + 2; g = lambda x: x ** 2',
             number=20)

print timeit(stmt='[func(x) for x in xrange(10**6) for func in (f, g)]',
             setup='gc.enable(); f = lambda x: x + 2; g = lambda x: x ** 2',
             number=20)

2.69210777094

3.13900787874

1.62461071932

25.5944058287

29.2623711793

25.7211849286



 类似资料:
  • 火花UDF是否可能返回多个值?如果是这样,如何在数据框架API中访问各个项目。

  • 我正在编写一个spring批处理作业,在其中一个步骤中,我为处理器编写了以下代码: null 欢迎任何暗示。

  • 问题内容: 具体来说,我有两个字符串列表,我想将它们组合成一个字符串,其中每一行是列表中的下两个字符串,以空格分隔: 我想要一个函数Combine_to_lines()返回: 我承认我已经解决了这个问题,所以我将发布答案。但是也许其他人有更好的表现,或者看到我的缺点。 更新 :我在上面简化了我的示例。在我的实际问题中,以更复杂的方式设置行的格式,这要求解压缩从zip()返回的元组。但是对于mhaw

  • 我使用改型2,我正在学习RxJava。我从某处下载了一个项目列表。我想对每个项目进行api调用,并创建扩展项目的新列表。两个调用都返回一个可观察的。它看起来像这样: 详细服务: } 问题是get细节返回一个可观察的,我不能用它来构造扩展项。在rxJava链中,更改get细节调用以返回对象不起作用,我猜是因为它将结果返回给主线程。如何获取对象本身?我尝试了很多其他的方法,但到目前为止都没有成功。

  • 我有一个方法返回一个

  • 问题内容: 我有一个列表,我想做的是嵌套循环 所需结果 我得到的结果 我希望将 foo 和 col中 的列表项一一注入到上面的shell脚本中。有没有一种方法可以将两个列表项一次传递到上面的shell脚本中? 我们可以做点什么 或使用for循环 引用我的Jenkinsfile }} 问题答案: 我相信转置是您要使用的方法,将两个列表配对,然后可以遍历结果: 更新 : 这就是我的目标。请注意,为简洁