推送并弹出到新列表

pushing and poping into new list

我正在尝试做一个循环,如果程序看到 letternumber 它将把 (x) 推入一个新列表,如果它看到星号 * 它必须弹出( ).它更像是一种堆栈算法,其中第一个字母或数字是最后一个。 FILO 先进后出

例如

如果给程序如下数组

inputVals = ["1", "2" ,"*" ,"3", "4", "*" ,"*", "*" ,"5", "6"]

应该输出

outputVal = ["2" ,"4", "3" ,"1"]

或字母输入

inputLetter = ["f" ,"a", "*", "d" ,"e" ,"t" ,"*" ,"o", "*" ,"*" ,"*" ,"*"]

字母输出

outPutLetter = ["a" ,"t", "o", "e" ,"d" ,"f"]

我该如何实现?

这应该有效:

def foo(input_list):
    result = []
    stack = []
    for i in input_list:
        if i == "*":
            result.append(stack.pop())
        else:
            stack.append(i)
    return result

print(foo(["1", "2" ,"*" ,"3", "4", "*" ,"*", "*" ,"5", "6"]))
print(foo(["f" ,"a", "*", "d" ,"e" ,"t" ,"*" ,"o", "*" ,"*" ,"*" ,"*"]))
['2', '4', '3', '1']
['a', 't', 'o', 'e', 'd', 'f']

一个简单的解决方案是这样的:

def asteriks_popping(list_in):
    result_list = []
    tmp_list = []
    for item in list_in:
        if item == '*':
            result_list.append(tmp_list.pop())
        else:
            tmp_list.append(item)

    return result_list