Python学习记录03-保留最后 N 个元素

{alert type=”info”}
今天这节,要学习的内容是deque。
在Python中,deque是一个类似列表的容器。
在Python的参考文档中,有它的详细解释:https://docs.python.org/zh-cn/3/library/collections.html#collections.deque
{/alert}

知识点

  • deque是一个双向队列。发音是 “deck”,”double-ended queue”的简称
  • 从两端都可以进行在内存里高效的进行添加和弹出操作。复杂度是O(1),相比列表的话是O(n),复杂度更小
  • 若maxlen乜有指定或者是None,则deque的长度是无限的,若指定了maxlen则长度为指定的长度,超出长度,则先进先出。

在这里我声明了一个deque,声明时候指定长度为2,所以当在长度满了的时候,再次增加元素,就会将1弹出。也就是说:当新的元素进入时候,如果达到长度上线,则最老的元素会被弹出 (队列的特点:先进先出)

dq = deque(maxlen=2)  
dq.append(1)
dq.append(2)
print(dq)     #deque([1, 2], maxlen=2)
dq.append(3)
print(dq)     #deque([2, 3], maxlen=2)

在这里我声明了一个deque,没有声明长度,所以长度可以无限扩大。从下面的代码可以看到 deque支持从两端进行操作。默认的append 和 pop都是增加和弹出最右边的元素。 也支持appendleft和popleft从左边添加和弹出元素

from collections import deque
dq2 = deque()
dq2.append(1)
dq2.append(2)
dq2.append(3)
dq2.append(4)
print(dq2) #deque([1, 2, 3, 4])
dq2.appendleft(0)
print(dq2) #deque([0, 1, 2, 3, 4])
dq2.pop()
print(dq2) #deque([0, 1, 2, 3])
dq2.popleft()
print(dq2)  #deque([1, 2, 3])

综上所述:若频繁的需要在两端更改数据,可以考虑使用deque。
还有一个场景是,如果你有读取某一个文件的最后几行的需求,就可以利用deque的特性来实现,比如我要读取这个文本的最后3行,那么只需要声明一个长度为3的deque来接收文件的每一行即可。


from collections import deque
# hello2
# hello2
# -----
# 'hxd1'
# 'hxd2'
# 'hxd4'
dq2 = deque(maxlen=3)
with open ('test.txt') as f :
    for i in f.read().splitlines():
        dq2.append(i)
print(dq2)  #deque(["'hxd1'", "'hxd2'", "'hxd4'"], maxlen=3)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇