接受两个堆栈作为参数和 return 一个 Python 列表的函数

A function accepting two stacks as parameters and return a Python list

请帮我写一个函数,将两个堆栈中的数字按位置相加,return结果作为列表。

这里的代码是对栈的操作:

stack_a = Stack()
stack_a.push(1)
stack_a.push(2)
stack_b = Stack()
stack_b.push(6)
stack_b.push(8)
result = add(stack_a , stack_b)
print(result)

这里是堆栈的定义class

class Stack:
  def __init__(self):
    self.items = []

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

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

  def pop(self):
    return self.items.pop()

  def peek(self):
    return self.items[len(self.items) - 1]

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

这是我到目前为止所做的:

def add(first, second):
  return first.pop() + second.pop()

我得到 10 个,这仅占 stack_a.push(2) 和 stack_a.push(10) 的加法。请帮助我改进我目前所得到的。

除了我添加的额外 add_all 函数外,您的代码将是相同的。它弹出您提供的两个堆栈的最后一项,添加它们,并将它们附加到您得到的列表中。

请注意,返回列表中的顺序是从后到前,就像在您的添加函数中一样。

def add(first, second):
    return first.pop() + second.pop()

def add_all(first_stack, second_stack):
    """
    Pops last elements of two stacks and adds them,
    until all elements are added.

    Returns:
        list
    """

    returned_lst = []

    # Determine the how many items will be added.
    # (ensures that no errors are raised if two stacks have different size)
    number_of_items_to_be_added = min(first_stack.size()), second_stack.size())

    # If you are using Python 2.x use 'xrange' instead of 'range'
    for element in range(number_of_items_to_be_added):
        returned_lst.append(add(first_stack, second_stack))

    return returned_lst

stack_a = Stack()
stack_a.push(1)
stack_a.push(2)
stack_b = Stack()
stack_b.push(6)
stack_b.push(8)
stack_b.push(9)

result = add_all(stack_a, stack_b)
print(result)

如果我误解了您的需求,或者您还需要更多,请告诉我。

您将需要遍历堆栈的元素,正如我们所见,堆栈的元素存储在 .items 中,这是一个列表,因此我们找出列表的长度和遍历每个索引并添加相应的元素。

如果两个堆栈的长度不相等,那么它将迭代到两个堆栈的最小长度。

def add(first, second):
    answer = []
    for i in xrange(min(len(first.items), len(second.items))):
        answer.append(first.items[i]+second.items[i])
    return answer