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
TypeError: объект Queue не повторяется
Хорошо, добавьте полную трассировку к вашему вопросу и код, который вы используете для его запуска. idownvotedbecau.se/noexceptiondetails тоже может быть полезным.
Исходное исключение: Traceback (последний вызов последним): файл «prog.python3», строка 74, в <module> my_queue.splice (another_queue), файл «prog.python3», строка 28, в соединении для i в second_queue: TypeError : Объект "Очередь" не повторяется
Хорошо, не могли бы вы отредактировать это прямо в вопросе? Текст, который предполагается форматировать в комментариях, сложно читать.
Хорошо, но если бы вы могли сказать мне, как перебирать очередь и добавлять ее в другую очередь, было бы здорово






Экземпляры вашего класса 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
Еще одна возможность - определение __getitem__.
@AlexHall да, но самописные классы должны использовать __iter__. Прочтите часть 7 этот ответ.
Что это за ошибка?