欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入浅出:Python的内置数据结构——堆、栈与队列

时间:11-22 名人轶事 提交错误

大家好,今天来为大家解答深入浅出:Python的内置数据结构——堆、栈与队列这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

heapq 堆队列

heapq 是一个内置堆结构,完全二叉树的一种特殊形式,其中父节点的值始终大于子节点。根据其性质,python可以使用一个满足heap[k]=heap[2 * k + 1 ]=heap[2 * k + 2]的列表来实现。 Heapq 是最小堆。如果你想达到最大堆,你可以使用一些技巧。比如heappush时填写数据 * -1,然后heappop时将弹出的元素乘以-1。

导入堆

堆=[]

heapq.heappush(堆, 3)

heapq.heappush(堆, 2)

heapq.heappush(堆, 1)

print(heap) #输出结果为[1, 3, 2]

# 按顺序输出堆的元素

heapq.heappop(heap) # 输出1

heapq.heappop(heap) # 输出2

heapq.heappop(heap) # 输出3

# 如果要输出前n个最大值和前n个最小值,可以使用

heapq.nlargest(n, 堆)

heapq.nsmallest(n, heap)

deque 双端队列

from collections import deque 可以实现栈或者队列功能,因为双端队列可以在队头和尾部进行编辑,所以如果我们要实现栈在python 从功能上来说,最好的选择是deque。当然,我们也可以使用普通的数组结构。

普通的队列操作是在队列尾部插入元素,然后从头部弹出元素:

dq=队列()

dq.append(3) #deque([3])

dq.append(4) #deque([3, 4])

dq.popleft() # Pop 3,dq 是deque([4])。如果设置为栈,FILO,则代码如下

dq=队列()

dq.append(3) #deque([3])

dq.append(4) #deque([3, 4])

dq.pop() # Pop 4,而dq是deque([3])

queue

队列是一个线程安全的包。这个包里有很多结构体,比如栈LifoQueue,如果想在并发环境下使用,最好使用这个结构体,因为如果栈为空,如果弹出栈顶元素,会阻塞会发生直到堆栈不为空。

LifoQueue

LifoQueue 是一个堆栈结构,具有入栈和退出操作。方法分别是put() 和get(),当LifoQueue() 为空时get() 会阻塞。

从队列导入LifoQueue

s=LifoQueue()

s.put(3)

s.put(4)

print(s.get()) # 打印4

print(s.get()) # 打印3

print(s.get()) # 等到s中有元素,则打印并退出

Queue

Queue 是一个有入队和出队操作的队列。方法分别是put()和get(),当Queue为空时get()会阻塞。此外,还可以设置队列的长度。如果不设置队列的长度,或者将队列的长度设置为小于等于0的数字,则表示队列的长度是无限的。可以通过.maxsize属性来获取队列的最大长度

从队列导入队列

q=队列()

q.put(3)

q.put(4)

print(q.get()) # 打印3

print(q.get()) # 打印4

print(q.get()) # 等待q中有元素,然后打印并退出

print(q.get_nowait()) # 如果队列q 为空,则不会等待,而是输出Empty 异常

PriorityQueue

PriorityQueue 是一个优先级队列,并且队列的元素是排序的,因此对于一个已排序的序列可以使用优先级队列,可以高效的获取最大或者最小的元素。

在调度问题的场景中,经常会用到优先级队列,主要包括获取最大值或最小值的操作和入队操作。

优先级队列内部封装了heapq。不同之处在于优先级队列是线程安全的。在并发环境中,应该选择使用PriorityQueue。

从队列导入PriorityQueue

pq=优先队列()

pq.put((2, "姓名"))

pq.put((1, "年龄"))

pq.put((3, "工作"))

而不是pq.empty():

打印(pq.get())

"""

输出内容如下

(1、‘年龄’)

(2、“姓名”)

(3、‘工作’)

OK,关于深入浅出:Python的内置数据结构——堆、栈与队列和的内容到此结束了,希望对大家有所帮助。

用户评论

那伤。眞美

Python自带的数据结构真是太方便了!

    有6位网友表示赞同!

相知相惜

我最近要用到堆栈和队列,正好学一学Python里面的实现。

    有20位网友表示赞同!

逃避

以前用过其他语言实现过的,看看Python怎么说做 ?

    有7位网友表示赞同!

余温散尽ぺ

python内置的堆、栈和队列真的很好用!

    有11位网友表示赞同!

猫腻

学习一下Python内置的数据结构,能提升我的编码效率!

    有19位网友表示赞同!

话少情在

这让我可以更快速地解决一些算法问题!

    有20位网友表示赞同!

滴在键盘上的泪

之前一直没机会深入了解,正好看看这篇关于Python堆栈和队列的文章。

    有11位网友表示赞同!

情深至命

想了解python实现的堆原理,感觉比手动实现要简单得多。

    有7位网友表示赞同!

命硬

学习一下Python自带的数据结构,能让我对编程思维更清晰.

    有20位网友表示赞同!

微信名字

堆、栈、队列都是很重要的数据结构,理解它们可以帮助我更加深入地学习Python.

    有5位网友表示赞同!

青瓷清茶倾城歌

python学习曲线确实比较平缓!

    有5位网友表示赞同!

■孤独像过不去的桥≈

这篇文章应该会把我入门到使用python堆、栈和队列。

    有6位网友表示赞同!

巴黎盛开的樱花

感觉用python实现的数据结构比其他语言更直观,更容易理解。

    有8位网友表示赞同!

你是梦遥不可及

这些数据结构在实际项目中应用非常广泛啊!

    有14位网友表示赞同!

軨倾词

学习Python内置的堆、栈和队列,可以让我更好地应对一些常见算法挑战!

    有12位网友表示赞同!

君临臣

Python的数据结构真是设计的太棒了!

    有15位网友表示赞同!

她的风骚姿势我学不来

这篇文章一定很有用了,我要收藏起来参考!

    有11位网友表示赞同!

良人凉人

感觉代码实现起来也比较简单。

    有14位网友表示赞同!

哥帅但不是蟋蟀

在面试中经常会用到堆栈和队列,学习Python的实现方法很有帮助!

    有17位网友表示赞同!

【深入浅出:Python的内置数据结构——堆、栈与队列】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活