接受两个堆栈作为参数和 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
请帮我写一个函数,将两个堆栈中的数字按位置相加,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