Рассмотрим список (список = []). Вы можете выполнять следующие команды:
insert i e: Insert integer e at position .
print: Print the list.
remove e: Delete the first occurrence of integer e.
append e: Insert integer e at the end of the list.
sort: Sort the list.
pop: Pop the last element from the list.
reverse: Reverse the list.
Инициализируйте свой список и прочитайте значение, за которым следуют строки команд, где каждая команда будет иметь типы, перечисленные выше. Повторите каждую команду по порядку и выполните соответствующую операцию в своем списке.
Пример ввода:
12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print
Мой код:
import sys
if __name__ == '__main__':
N = int(input())
my_list = []
inputs = []
for line in sys.stdin:
inputs.append(line)
for item in inputs:
if item[0:5] == 'print':
print(my_list)
elif item[0:2] == 'in':
inserts = [s for s in item.split()][1:3]
inserts = list(map(int, inserts))
my_list.insert(inserts[0], inserts[1])
elif item[0:3] == 'rem':
inserts = list(map(int, [s for s in item.split()][1]))
my_list.remove(inserts[0])
elif item[0:2] == 'ap':
inserts = list(map(int, [s for s in item.split()][1]))
my_list.append(inserts[0])
elif item[0:4] == 'sort':
my_list.sort()
elif item[0:3] == 'pop':
my_list.pop()
elif item[0:7] == 'reverse':
my_list.reverse()
Я не уверен, почему мой код не утверждается при отправке. В этом тестовом случае, который они предоставили, мой код проходит. Ожидаемый результат следующий:
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
Большое спасибо за помощь!
Честно говоря, я не уверен, что это имеет значение. Из того, что я вижу, это не должно влиять на результат, верно? Первое число обозначает только то, сколько команд может быть.





Ваша проблема в том, что в вашем коде добавления есть ошибка, когда добавляемое число имеет более одной цифры. В вашем коде здесь
inserts = list(map(int, [s for s in item.split()][1]))
my_list.append(inserts[0])
например, если команда «item» была «добавить 12», [s for s in item.split()][1] будет строкой «12», поэтому list(map(int, [s for s in item.split()][1])) сопоставляет каждый символ в этой строке с целым числом, давая вам [1, 2], а не [12], и поэтому my_list.append(inserts[0]) будет добавлять число 1 вместо 12. Так что исправьте это, и вы решите свою проблему.
Большое спасибо за это! Это решило мою проблему. Я ценю помощь.
Нарезка строки не является хорошей идеей. Кроме того, вам нужно получить пользовательский ввод N раз. Таким образом, вы можете отредактировать свое решение, как показано ниже:
if __name__ == '__main__':
N = int(input())
the_list = list()
for _ in range(N):
query = input().split()
if query[0] == "print":
print(the_list)
elif query[0] == "insert":
the_list.insert(int(query[1]), int(query[2]))
elif query[0] == "remove":
the_list.remove(int(query[1]))
elif query[0] == "append":
the_list.append(int(query[1]))
elif query[0] == "sort":
the_list = sorted(the_list)
elif query[0] == "pop":
the_list.pop()
elif query[0] == "reverse":
the_list.reverse()
Почему мы делаем это «query = input().split()»? Мне нужно понять его цель
@Rahul, потому что нам нужно получить правильный формат ввода пользователя. Помните, что пользовательский ввод — это строка, но нам нужно первое слово в виде строки, а остальные должны быть целыми, чтобы решить проблему.
if __name__ == '__main__':
N = int(input())
m=list()
for i in range(N):
method,*l=input().split()
k=list(map(int,l))
if len(k)==2:
q=[k[0]]
w=[k[1]]
elif len(k)==1:
q=[k[0]]
if method =='insert':
m.insert(q[0],w[0])
elif method == 'append':
m.append(q[0])
elif method == 'remove':
m.remove(q[0])
elif method =='print':
print(m)
elif method == 'reverse':
m.reverse()
elif method =='pop':
m.pop()
elif method == 'sort':
m.sort()
Хотя этот код может решить вопрос, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для того, кто задает сейчас. Пожалуйста, редактировать ваш ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются.
def execute(lst, cmd, *args):
if cmd == 'insert':
lst.insert(int(args[0]), int(args[1]))
elif cmd == 'print':
print(lst)
elif cmd == 'remove':
lst.remove(int(args[0]))
elif cmd == 'append':
lst.append(int(args[0]))
elif cmd == 'sort':
lst.sort()
elif cmd == 'reverse':
lst.reverse()
elif cmd == 'pop':
lst.pop()
else:
print("Command not recognized!")
lst = []
for _ in range(int(input())):
execute(lst, *input().split())
if __name__ == '__main__':
N = int(input())
reqarr = []
for i in range(0,N):
inplist = (input().split())
if (inplist[0] == "insert" ):
reqarr.insert(int(inplist[1]),int(inplist[2]))
elif (inplist[0] == "print"):
print(reqarr)
elif (inplist[0] == "remove"):
reqarr.remove(int(inplist[1]))
elif (inplist[0] == "append"):
reqarr.append(int(inplist[1]))
elif (inplist[0]= = "sort"):
reqarr.sort()
elif (inplist[0]= = "reverse"):
reqarr.reverse()
elif (inplist[0] == "pop"):
reqarr.pop()
Добро пожаловать в СО. Хотя мы благодарим вас за ваш ответ, было бы лучше, если бы он имел дополнительную ценность по сравнению с другими ответами. В этом случае ваш ответ не представляет дополнительной ценности, поскольку hevalhazalkurt уже опубликовал это решение. Если предыдущий ответ был вам полезен, вы должны проголосовать за него, как только у вас будет достаточно репутации.
Хорошо. Я постараюсь сделать это из следующих вкладов.
def operation(last_value1,operation_name,*number):
list_number = last_value1
if operation_name.lower() == 'insert':
list_number.insert(int(number[0]),int(number[1]))
elif operation_name.lower() == 'remove':
list_number.remove(int(number[0]))
elif operation_name.lower() == 'append':
list_number.append(int(number[0]))
elif operation_name.lower() == 'sort':
list_number = sorted(list_number)
elif operation_name.lower() == 'print':
print(list_number)
elif operation_name.lower() == 'pop':
list_number.pop()
elif operation_name.lower() == 'reverse':
list_number= list_number[::-1]
return list_number
N = int(input())
last_value = []
for count in range(0,N):
command_input = input("Please enter the command with number seperated by space")
command_input = command_input.split()
if len(command_input) == 3:
last_value = operation(last_value,command_input[0],command_input[1],command_input[2])
elif len(command_input) == 2:
last_value= operation(last_value,command_input[0],command_input[1])
else:
last_value = operation(last_value,command_input[0])
Пожалуйста, не публикуйте только код в качестве ответа, но также объясните, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и качественны, и с большей вероятностью привлекут положительные голоса.
*if __name__ == '__main__':
N = int(input())
the_list = list()
for cmd in range(N):
input_cmd = input().split()
if input_cmd[0] == 'print':
print(the_list)
elif input_cmd[0] == 'insert':
the_list.insert(int(input_cmd[1]), int(input_cmd[2]))
elif input_cmd[0] == 'remove':
the_list.remove(int(input_cmd[1]))
elif input_cmd[0] == 'append':
the_list.append(int(input_cmd[1]))
elif input_cmd[0] == 'sort':
the_list = sorted(the_list)
elif input_cmd[0] == 'pop':
the_list.pop()
elif input_cmd[0] == 'reverse':
the_list.reverse()*
Хотя ответы только по коду могут помочь в конкретном случае, предоставьте подробную информацию о том, почему и как это работает, чтобы можно было решить аналогичные проблемы.
Вот решение без операторов «if» или «elif»:
if __name__ == '__main__':
N = int(input())
commands = {
"insert": lambda x, y, z: x.insert(y, z),
"print": lambda x: print(x),
"remove": lambda x, y: x.remove(y),
"append": lambda x, y: x.append(y),
"sort": lambda x: x.sort(),
"pop": lambda x: x.pop(),
"reverse": lambda x: x.reverse(),
}
out = []
for i in range(N):
a = input()
split_a = a.split(' ')
command = split_a[0]
try:
commands[command](out, int(split_a[1]), int(split_a[2]))
except IndexError:
try:
commands[command](out, int(split_a[1]))
except IndexError:
commands[command](out)
Добро пожаловать в Stackoverflow и спасибо за помощь. Возможно, вы могли бы объяснить, почему удаление операторов if и elif поможет?
Спасибо, Тим. Я лично стараюсь избегать как можно большего количества условных выражений «if» и «elif», потому что они часто используются слишком часто. Тем не менее, я использую их, когда у меня нет выбора. По моему опыту, попытки найти решения без использования «if» и «elif» помогают мне мыслить по-другому и научиться лучше подходить к определенным проблемам. Кроме того, когда дело доходит до модульного тестирования вашего кода, вам может потребоваться обрабатывать все условия, если это возможно, при использовании условных выражений. Например, для этого вопроса требуется 7+ условных выражений «if» и «elif». С моим подходом мне нужно проверить только 3 случая в моей попытке за исключением.
Спасибо - ваше решение кажется более питоническим.
N = int(input())
lst = []
for i in range(N):
command = input().split()
if command[0] == "print":
print(lst)
elif len(command) == 1:
getattr(lst, command[0])()
elif len(command) == 2:
getattr(lst, command[0])(int(command[1]))
else:
getattr(lst, command[0])(int(command[1]), int(command[2]))
Очень креативная идея! Я обнаружил, что последние три случая elif/else можно упростить до else: getattr(lst, command[0])(*map(int, command[1:]))
if __name__ == '__main__':
N = int(input())
l=[]
for i in range(N):
s=input().split("\n")
for j in s:
m=j.split()
if m[0]= = "insert":
l.insert(int(m[1]),int(m[2]))
elif m[0]= = "print":
print(l)
elif m[0]= = "remove":
l.remove(int(m[1]))
elif m[0]= = "append":
l.append(int(m[1]))
elif m[0]= = "sort":
l.sort()
elif m[0]= = "pop":
l.pop()
elif m[0]= = "reverse":
l.reverse()
Добро пожаловать в СО. Ответы только на код вообще не рекомендуются. Пожалуйста, добавьте соответствующие детали к своим вопросам, чтобы другие также могли понять ваш ответ.
x= int(input())
lst = []
for i in range(x):
n = input()
lst.append(n)
newlist=[]
for ele in lst:
splitted = ele.split()
if splitted[0] == "insert":
newlist.insert(int(splitted[1]),splitted[2])
elif splitted[0] == "print":
print(newlist)
elif splitted[0] == "remove":
newlist.remove(splitted[1])
elif splitted[0] == "append":
newlist.append(splitted[1])
elif splitted[0] == "sort":
newlist.sort()
elif splitted[0] == "pop":
newlist.pop()
elif splitted[0] == "reverse":
newlist.reverse()
else:
print("Command out of Scope")
Было бы полезно, если бы вы добавили полезный комментарий о том, что вы сделали, чтобы код работал. Просто код сам по себе не поможет этому человеку понять, что он сделал не так.
### You can try this one:
if __name__ == '__main__':
n = int(input())
num_list = []
for _ in range(n):
string = input().split()
command = string[0]
args = string[1:]
if command != "print":
command += "(" + ",".join(args) + ")"
eval("num_list." + command)
else:
print(num_list)
Вы читаете
Nизstdin, но никогда не используете его. Возможно ли, что это приводит к проблемам, когда количество строк во входном потоке отличается отN? (обратите внимание, что я не читал спецификацию проблемы)