1
xuanbg 2020-11-15 12:56:32 +08:00 1
ArrayList 用 get(i)方法按下标取难道不是最快的?
|
2
black11black 2020-11-15 13:09:04 +08:00 1
末项直觉想到 deque,不好使的话大概就是迭代器底层问题了吧,试试 cython 插件?
|
3
imn1 OP |
4
JeffGe 2020-11-15 13:36:39 +08:00 via Android 1
for x in iterable: pass
这个也可以取末项吧 |
5
freakxx 2020-11-15 13:47:19 +08:00 1
|
6
imn1 OP |
7
xuanbg 2020-11-15 14:32:58 +08:00 1
如果你的需求是取最后元素,不妨抛弃数组改用栈。最后一个永远在顶部。
|
8
imn1 OP 测试了几种写法
*_, last = itertools.accumulate(pairs, fun) 0.013 collections.deque(itertools.accumulate(pairs, fun), 1).pop() 0.013 next(more_itertools.tail(1, itertools.accumulate(pairs, fun))) 0.017 collections.deque(itertools.accumulate(pairs, fun))[-1] 0.019 deque 时间不稳定,变化幅度大 #7 求栈思路是最合适的,可惜 python 迭代类型不支持反向,需要更高级写法,无奈能力不够 more_itertools.nth 没测试,应该跟 tail 差不多,不过以后从迭代器提取中间元素应该很有用 |