Python - вернуть комбинацию из 2 очередей - PullRequest
0 голосов
/ 29 апреля 2018
class Queue:
def __init__(self):
    self.items = []

def isEmpty(self):
    return self.items == []

def enqueue(self, item):
    self.items.append(item)

def dequeue(self):
    if self.items == []:
        raise IndexError('The queue is empty.')
    return self.items.pop()

def size(self):
    return len(self.items)

def __str__(self):
    return "Queue: " + (str(self.items))

def enqueue_list(self, list):
    for i in list:
        self.items.append(i)
    return self.items

def splice(self, second_queue):
    for i in second_queue:
        self.items.enqueue(i)
    return self.items

Привет,

То, что я пытаюсь сделать, находится внизу в методе сплайсинга. Я хочу перебрать вторую очередь и добавить ее в конец исходной. Я не могу узнать, как я могу перебрать очередь, не вызывая ошибки, однако. Стоит ли сначала изменить second_queue в список?

Original exception was:
Traceback (most recent call last):
File "prog.python3", line 74, in <module>
my_queue.splice(another_queue)
File "prog.python3", line 28, in splice
for i in second_queue:
TypeError: 'Queue' object is not iterable

1 Ответ

0 голосов
/ 29 апреля 2018

Экземпляры вашего класса Queue не повторяются.

Они содержат список items, но Python не знает, что он должен перебирать этот список, когда вы используете цикл for над экземпляром Queue.

Чтобы делегировать итерацию в завернутый list, просто добавьте метод

def __iter__(self):
    return iter(self.items)

Демо с фиксированным классом:

>>> q = Queue()
>>> q.enqueue(1)
>>> q.enqueue(2)
>>> q.items
[1, 2]
>>>
>>> for item in q:
...     print(item)
... 
1
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...