список номеров в стек обратно в список

77
9

Представьте себе четыре железнодорожных вагона, расположенных на входной стороне дорожки на рисунке выше, с номерами 1, 2, 3 и 4 соответственно. Предположим, что мы выполняем следующую последовательность операций (которая совместима с направлением стрелок на диаграмме и не требует, чтобы автомобили "перепрыгивали" на другие автомобили):

В результате этих операций первоначальный заказ автомобилей 1234 года был изменен на 2431 год.

Описанные выше операции можно более кратко описать с помощью кода SSXSSXXX, где S означает перемещение автомобиля со входа в стек, а X означает перемещение автомобиля из стека в выход. Некоторые последовательности S и X определяют бессмысленные операции, поскольку на указанном треке не может быть автомобилей; например, последовательность SXXSSXXS не может быть выполнена. (Попробуйте, чтобы понять, почему.)

Напишите и протестируйте функцию, которая эмулирует переключение вагона: # [импортные заявления] import q2_fun

# [constants]

# [rest of program code]
cars = [1, 2, 3, 4]
s_x = input("enter a code with s and x to move one stack to another")
list1 = q2_fun.train_swicth(cars, s_x)
print(list1)

from stack_array import Stack

def train_swicth(cars, s_x):

s = Stack()
list1 = []

for i in range(len(s_x)):
if s_x[i] == "s":
a = s_x.append()
s.push(a)
elif s_x[i] == "x":
b = s.pop()
list1.append(b)

return list1

Я продолжаю получать [] в качестве возврата, и он должен быть 2431 с ssxssxxx. Могу ли я получить помощь?

спросил(а) 2021-01-25T18:26:08+03:00 4 месяца, 4 недели назад
1
Решение
88

если бы я понял, что вы правы, вы могли бы сделать:

def train_swicth(cars, s_x):
i=0
s=[]
out=[]
for c in s_x:
if c=="s":
s.append(cars[i])
i+=1
elif c=="x":
out.append(s.pop())
return out

поскольку списки могут использоваться как стеки с добавлением в качестве push-операции

ответил(а) 2021-01-25T18:26:08+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема