You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3中是否有类似列表推导式的collections.deque创建方法?

直接生成collections.deque替代列表推导式的方法

核心实现方法

Python没有原生的"deque推导式",但可以利用collections.deque的构造函数支持接收任意可迭代对象的特性,直接用生成器表达式传入,跳过中间列表的创建步骤:

from collections import deque

# 直接生成deque,无中间列表
dq = deque(int(x) for x in input().split())

这个写法会逐个将输入的字符串转换为整数,同时直接添加到deque中,不会在内存中生成完整的中间列表,完美符合你跳过列表环节的需求。

关于性能的澄清

你提到的"先创建列表再转deque增加O(n)时间复杂度"其实是个误解:两种方式的时间复杂度都是O(n)(都需要遍历n个元素一次),但空间复杂度有差异:

  • 列表推导式+deque(some_list):会先创建一个占用O(n)空间的列表,再转换为deque,内存中会短暂存在两个O(n)规模的结构
  • 生成器表达式直接传入deque:内存中不会生成完整列表,仅在迭代过程中处理单个元素,内存占用更优,对于10万级别的大序列,这种差异会更明显。

适配你的HackerRank需求的完整代码

结合题目中"已知序列长度n"的条件,你可以写出如下代码,确保只读取指定数量的元素:

from collections import deque

n = int(input())
# 直接生成对应长度的deque,无中间列表
dq = deque(int(x) for x in input().split())

# 后续可直接进行两端操作,比如:
# 弹出左端元素
left_val = dq.popleft()
# 弹出右端元素
right_val = dq.pop()
# 比较两端元素
if dq[0] > dq[-1]:
    pass

如果需要严格限制只读取n个元素(避免输入多余内容的干扰),可以结合itertools.islice:

from collections import deque
from itertools import islice

n = int(input())
dq = deque(int(x) for x in islice(input().split(), n))

内容的提问来源于stack exchange,提问作者Kevin Flowers Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:21:40