列表理解:为每个项目返回两个(或更多)项目 [英] List comprehension: Returning two (or more) items for each item
本文介绍了列表理解:为每个项目返回两个(或更多)项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以为列表理解中的每个项目返回2个(或更多)项目?
我想要的东西(示例):
What I want (example):
[f(x), g(x) for x in range(n)]
应返回[f(0), g(0), f(1), g(1), ..., f(n-1), g(n-1)]
所以,有一些东西可以代替这段代码:
So, something to replace this block of code:
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
2.69210777094
3.13900787874
3.13900787874
1.62461071932
1.62461071932
25.5944058287
25.5944058287
29.2623711793
29.2623711793
25.7211849286
25.7211849286
这篇关于列表理解:为每个项目返回两个(或更多)项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文