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

将切片符号与collections.deque一起使用

柯轶
2023-03-14
问题内容

您如何在deque不进行更改的情况下,高效,优雅地从Python中提取项目3..6 :

from collections import deque
q = deque('',maxlen=10)
for i in range(10,20):
    q.append(i)

在片符号似乎并没有与工作deque


问题答案:

import itertools
output = list(itertools.islice(q, 3, 7))

例如:

>>> import collections, itertools
>>> q = collections.deque(xrange(10, 20))
>>> q
deque([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> list(itertools.islice(q, 3, 7))
[13, 14, 15, 16]

与到目前为止发布的其他解决方案相比,这应该更有效。证明?

[me@home]$ SETUP="import itertools,collections; q=collections.deque(xrange(1000000))"

[me@home]$ python -m timeit  "$SETUP" "list(itertools.islice(q, 10000, 20000))"
10 loops, best of 3: 68 msec per loop

[me@home]$ python -m timeit "$SETUP" "[q[i] for i in  xrange(10000, 20000)]"
10 loops, best of 3: 98.4 msec per loop

[me@home]$ python -m timeit "$SETUP" "list(q)[10000:20000]"
10 loops, best of 3: 107 msec per loop


 类似资料:
  • 问题内容: 我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以读取。 Python至少有两个队列类Queue.Queue和collections.deque,前者似乎在内部使用后者。两者都声称在文档中是线程安全的。 但是,队列文档也指出: collections.deque是具有快速原子的append()和popleft()操作且不需要锁定的无界队列的替代实现。 我猜我不是很理解:这是否

  • 问题内容: 在以下示例中: 其中:将打印foo中的所有元素。但是,将省略第一个或第0个元素。 我了解我可以使用foo.reverse()或foo [::-1]反向打印列表,但是我想了解为什么foo [6:0:-1]不能打印整个列表? 问题答案: 切片符号简而言之: 如果要在反转列表时包括第一个元素,则将中间元素留空,如下所示: 您还可以在这里找到有关Python切片的一些很好的信息: Unders

  • 问题内容: 我正在尝试创建一个viewpager,它可以通过3个不同的片段滑动,每个片段具有不同的工具栏。我之前已经在一个活动中实现了新工具栏,并且可以使用它,但是我正在尝试使其与片段一起使用 这是片段代码 我使用扩展了片段,但是却出现了错误 我不确定如何解决此问题,如果删除代码,它将停止在某些设备上运行吗? 问题答案: 片段没有这种方法。ActionBar是Activity的属性,因此要将工具栏

  • 我正在尝试创建一个viewpager,它可以用不同的工具栏浏览3个不同的片段。我之前在一个活动中实现了新工具栏,并使其正常工作,但我正在尝试使其与片段一起工作 这是碎片代码 我正在用片段扩展我的片段,但是我得到了错误 我不知道如何解决这个问题,如果我删除代码,它会停止与某些设备一起工作吗?

  • 问题内容: 我是AngularJS的新手,正在用记号表构建仪表板。 试图将dygraphs网站上的示例代码放在ng-repeat- list中,以进行测试。对于y中的每个x,期望有相同的样本图。不幸的是,该图没有绘制,只是轴,控制台没有显示任何错误。 如果我删除ng-repeat,尽管可以(单个图形)工作- dygraphs代码有效。当然,像我在这里那样直接在视图中绘制图形没有任何意义,但我仍然想

  • 我有4个片段,其中一个片段中有一个viewpager和一个不同的类,我用3个其他片段定义了viewpager的适配器,第一次打开此片段时,所有子片段都正确显示在viewpager中,但当我切换(使用transaction.replace)到另一个片段并再次返回时,子片段消失了,我不能使用ChildFragmentManager,因为它在代码中显示错误(ChildFragmentManager无法解