0

我这里有个问题,我需要做方法 pop 但我只能使用 SimpleList 中的函数,有什么想法吗?

我只能修改类 RingBuffer,所以我不能使用 remove()、pop() 等。

from typing import Optional, List

# (‹sl› is instance of ‹SimpleList›):
#
#  • ‹sl.append(x)› adds to the end of list ‹x›,
#  • ‹sl.get(i)› returns value of index ‹i›,
#  • ‹sl.size()› returns current size of list,
#  • ‹sl.set(i, x)› sets index ‹i› to value ‹x›.

class RingBuffer:

    def __init__(self, size: int, storage: 'SimpleList'):
        self.sl = storage
        self.size = size

    def push(self, value: int) -> bool:
        if self.sl.size() >= self.size:
            return False
        else:
            self.sl.append(value)
            return True

    # Method ‹pop› removes first value from list and returns it.
    # If list is empty, method doesn't do anything and returns ‹None›.

    def pop(self) -> Optional[int]:
        if self.sl.size() == 0:
            return None

class SimpleList:

    def __init__(self) -> None:
        self.__items: List[int] = []
    def append(self, x: int) -> None:
        self.__items.append(x)
    def get(self, i: int) -> int:
        return self.__items[i]
    def set(self, i: int, x: int) -> None:
        self.__items[i] = x
    def size(self) -> int:
        return len(self.__items)
4

1 回答 1

1

我想你已经明白了,但只是为了你比较:

def pop(self) -> Optional[int]:
    if self.sl.size() == 0:
        return None
    
    l = [(self.sl.get(x)) for x in range(self.sl.size())]
    self.sl = SimpleList()
    [self.sl.append(x) for x in l[1:]]
    return l[0]
于 2021-10-28T17:56:21.560 回答