这与
list comprehension vs map
当你使用
lambda
和你的
reduce
语句发送python代码以在每次迭代中运行,从而减慢reduce的速度。列表理解的目的是更有效和可读性,因此它们是首选的方法。
那就是为什么不用
itertools.chain.from_iterable
以及
map
发出砰的声响
operator.itemgetter
是的。这会产生相同的输出,同时也会利用一些很好的内置方法。
没有测试速度
>>> from itertools import chain
>>> from operator import itemgetter
>>> arr = array([[array([33120, 28985, 9327, 45918, 30035, 17794, 40141, 1819, 43668],
dtype='int64')],
[array([33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665],
dtype='int64')],
[array([46842, 26434, 39758, 27761, 10054, 21351, 22598, 34862, 40285,
17616, 25146, 32645, 41276], dtype='int64')],
[array([24534, 8230, 14267, 9352, 3543, 29397, 900, 32398, 34262,
37646, 11930, 37173], dtype='int64')],
[array([25157], dtype='int64')],
[array([ 8859, 20850, 19322, 8075], dtype='int64')]], dtype=object)
>>> array(list(chain.from_iterable(map(itemgetter(0),arr.tolist()))))
[33120 28985 9327 45918 30035 17794 40141 1819 43668 33754 24838 17704
21903 17668 46667 17461 32665 46842 26434 39758 27761 10054 21351 22598
34862 40285 17616 25146 32645 41276 24534 8230 14267 9352 3543 29397
900 32398 34262 37646 11930 37173 25157 8859 20850 19322 8075]