gpt4 book ai didi

Python 字符串先进先出

转载 作者:行者123 更新时间:2023-11-28 16:49:32 25 4
gpt4 key购买 nike

Python 是否有任何数据类型用于字符串的 FIFO 缓冲?我创造了一些东西(如下),但我怀疑我是在重新发明轮子。

class Buffer(list):
def __init__(self):
super(Buffer, self).__init__()

def put(self, nlmsg):
for c in nlmsg: self.append(c)

def peek(self, number):
return "".join( [self[i] for i in range(number)] )

def get(self, number):
return "".join( [self.pop(0) for i in range(number)] )

使用示例:

>>> buf = Buffer()
>>> buf.put('abcdefg')
>>> buf
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> buf.peek(4)
'abcd'
>>> buf
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> buf.get(5)
'abcde'
>>> buf
['f', 'g']

我查看了 Queue 但在添加 str 时我必须手动拆分每个字节,否则整个 str 将成为队列中的一个项目。那里已经有这样的东西了吗?

最佳答案

使用 collections.deque 它将按如下方式实现:

from collections import deque

class Buffer(deque):
def put(self, iterable):
for i in iterable:
self.append(i)

def peek(self, how_many):
return ''.join([self[i] for i in xrange(how_many)])

def get(self, how_many):
return ''.join([self.popleft() for _ in xrange(how_many)])



buf = Buffer()
buf.put('abcdefg')
print buf
print buf.peek(4)
print buf
print buf.get(5)
print buf

示例输出:

deque(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
abcd
deque(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
abcde
deque(['f', 'g'])

关于Python 字符串先进先出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com