#python #list #input
#python #Список #ввод
Вопрос:
Итак, допустим, у меня есть список (это пример, но концепция та же):
List = ["I", "hate", "don't", "love", "you."]
Как я могу / есть ли способ удалить несколько элементов из списка? Я в основном хочу, чтобы программа:
- Принимает входные данные от пользователя.
Как? Всякий раз, когда пользователь вводитdelete x y
x и y представляют номер, присвоенный элементу в списке - Удаляйте указанные элементы из списка всякий раз, когда пользователь вводит «удалить» (воспринимайте это как команду. Кроме того, это то же самое удаление из пункта # 1)
Пример:
#The list
List = ["I", "hate", "don't", "love", "you."]
#what the person types in the console as input
delete 2 3
Как только пользователь введет это и нажмет enter, программа удалит 2-е и 3-е значения из списка (в данном случае, с нашей человеческой точки зрения, слова «ненавидеть» и «не», поскольку они занимают второе и третье место соответственно) И затем он распечатает список.
Проблема в том, что я понятия не имею, как это сделать. Кто-нибудь может мне помочь? Надеюсь, я был достаточно ясен. Если нет, я могу попытаться объяснить это по-другому.
Комментарии:
1. что делать, если число больше длины списка? и что вы пробовали, это просто простая программа
2. вы имеете в виду, что ваша программа принимает
"delete ..."
инструкцию черезinput()
?3. Это хороший вопрос, дэдшот. В конце концов, я постараюсь подумать об этом самостоятельно. Я постараюсь не просить слишком много о помощи ^^; Ммм, я кое-что пробовал, но это даже не так, как я хотел. Я закодировал, что если пользователь введет «удалить» (только это), он напечатает «Какие элементы из списка вы хотите удалить?». Я установил входные данные как целое число и присвоил ему значение переменной (numbers) Затем я закодирую «List.pop (numbers)», а затем он удалит значение из списка. Но тогда, если я наберу 2 числа, это выдаст ошибку.
4. Ммм, да, Tibebes. M. Пользователь вводит «удалить x y» (x и y — числа), и он должен удалить значения, соответствующие числам (например, если я поставлю 1, то он удалит первое значение и так далее)
Ответ №1:
Вы можете попробовать следующее:
List = ["I", "hate", "don't", "love", "you."]
command, *vals = input("Enter command: ").split()
if command=='delete':
print([elem for i, elem in enumerate(List, start=1) if i not in list(map(int, vals))])
Вывод:
Enter command: delete 2 3
['I', 'love', 'you.']
ПРИМЕЧАНИЕ: если ввести число, превышающее длину списка, оно ничего не делает.
Ответ №2:
Я надеюсь, что это поможет. Я впервые отвечаю на вопрос здесь, поэтому дайте мне знать, все ли в порядке, и если вам нужна дополнительная помощь.
lst = ["I", "hate", "don't", "love", "you."]
Принимает входные данные от пользователя. Это будет сохранено в виде строки.
Мы возьмем ваш пример пользователя, вводящего delete 2 3
command = input("Enter a command")
Эта переменная будет использоваться для сохранения команды в соответствии с вашим шагом № 2
saved_command = None
Первый блок if выполняется, если первым словом их команды является ‘delete’
, а если saved_command по-прежнему None
if command.startswith("delete") and not saved_command:
# This makes the saved_command a list. It splits the
# command string where there are spaces so it becomes
# ["delete", "2", "3"]. Then, we remove 'delete' so
# it is just the numbers
saved_command = command.split().remove("delete")
Этот второй блок if выполняется, если команда, данная пользователем, начинается с
delete, а saved_command не является None . Это всегда будет выполняться, если выполняется первый
блок if, поскольку saved_command установлен в этом блоке if
if command.startswith("delete") and saved_command:
# Loops through the numbers given. Note that with this, if the user
# passes in something which is not a number, the program will crash
for number in saved_command:
# Removes each item from the original list.
# Note that normally, items are indexed from 0 onwards
# so to have it be in the way you wanted, i.e. 1 is the first
# item, I've subtracted 1 from the number.
# int() is used because the numbers were given as user input so
# they would still be strings
try:
lst.pop(int(number) - 1)
except KeyError:
pass
Обратите внимание, что для сохранения значения saved_command программа должна выполняться внутри цикла, хотя вы, вероятно, это знали.