stack

ソースコード

from titan_pylib.data_structures.stack.stack import Stack

view on github

展開済みコード

 1# from titan_pylib.data_structures.stack.stack import Stack
 2from typing import TypeVar, Generic, Iterable
 3
 4T = TypeVar("T")
 5
 6
 7class Stack(Generic[T]):
 8
 9    # コンセプト:popをしないStack
10
11    def __init__(self, a: Iterable[T] = []):
12        self.data: list[T] = list(a)
13        self.back: int = len(self.data)
14
15    def pop(self) -> T:
16        assert self, f"IndexError: pop() from empty {self.__class__.__name__}."
17        self.back -= 1
18        return self.data[self.back]
19
20    def append(self, val: T) -> None:
21        if self.back < len(self.data):
22            self.data[self.back] = val
23        else:
24            self.data.append(val)
25        self.back += 1
26
27    def top(self) -> T:
28        return self.data[self.back - 1]
29
30    def __getitem__(self, k: int) -> T:
31        if k < 0:
32            k += self.back
33        return self.data[k]
34
35    def __iter__(self):
36        self.__iter = -1
37        return self
38
39    def __next__(self):
40        if self.__iter + 1 >= self.back:
41            raise StopIteration
42        self.__iter += 1
43        return self.data[self.__iter]
44
45    def __len__(self):
46        return self.back
47
48    def __bool__(self):
49        return self.back > 0
50
51    def __str__(self):
52        return "[" + ", ".join(map(str, self)) + "]"
53
54    def __repr__(self):
55        return f"{self.__class__.__name__}({self})"

仕様

class Stack(a: Iterable[T] = [])[source]

Bases: Generic[T]

append(val: T) None[source]
pop() T[source]
top() T[source]