Добавить два списка в один список - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь пометить два списка, которые я создал с помощью класса, в новый список. Я использую функцию __add__. Но он постоянно добавляет первые два индекса и останавливается.

Это мой код:

class Stack:
    def __init__(self):
        self.__items = []
        self.__top = 0

    def is_Empty(self):
        return self.__top <= 0
        try:
            raise Exception('Stack empty.')
        except Exception as error:
            print(error)

    def __str__(self):
        """Print current stack"""
        if self.is_Empty() == True:
            return "Stack empty"
        else:
            return "Stack is not empty"

    def push(self, item):
        """Push item in stack."""
        self.__items.append(item)
        self.__top += 1

    def pop(self):
        """Remove top of the stack."""
        if self.__top <= 0:
            return self.is_Empty()
        self.__top -= 1
        return self.__items.pop()

    def top(self):
        """Return top of the stack."""
        if self.__top <= 0:
            return self.is_Empty()
        else:
            return self.__items[-1]

    def my_stack(self):
        """Show the current stack"""
        if self.__items == []:
            return self.is_Empty()
        else:
            return f"The current stack is {self.__items}"

    def __add__(self,other):
        """Add two lists together"""
        newlst = []
        for i, j in zip(self.__items, other.__items):
            newlst.append(i+j)
            return newlst

    def __eq__(self, other):
        """Return True if two list is equal else Return False """
        return (self is other) or (self.__items) == (other.__items)

например:

stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack2 = Stack()
stack2.push(4)
stack2.push(5)
stack2.push(6)

Теперь я пытаюсь добавить два стека в stack3:

stack3 = stack + stack2

Результат, который я получаю, таков:

>>> print(stack3)
[5]

Моя цель - получить stack3 вот так:

>>> print(stack3)
[1, 2, 3, 4, 5, 6]

1 Ответ

1 голос
/ 26 апреля 2020

Ваш текущий код

   def __add__(self,other):
        """Add two lists together"""
        newlst = []
        for i, j in zip(self.__items, other.__items):
            newlst.append(i+j)
            return newlst

добавляет первые элементы каждого списка .__items и возвращает результат после этого.

Чтобы добавить внутренние списки один после друг друга и возврата в виде списка, это будет работать:

def __add__(self, other):
    """Add two lists together"""
    if isinstance(other,Stack):
        return self.__items + other.__items

    return [] # or self.__items or raise Exception

Чтобы вернуть новый Stack -экземпляр, вы можете сделать:

def __add__(self, other):
    """Add two lists together"""
    if isinstance(other, Stack):
        s = Stack()
        for item in self.__items:
            s.push(item)
        for item in other.__items:
            s.push(item)
         return s
    return [] # or self.__items or raise Exception
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...