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
相关产品推荐
相关产品推荐

