Удалять значения из списка всякий раз, когда пользователь вводит определенную вещь

#python #list #input

#python #Список #ввод

Вопрос:

Итак, допустим, у меня есть список (это пример, но концепция та же):

 List = ["I", "hate", "don't", "love", "you."]
  

Как я могу / есть ли способ удалить несколько элементов из списка? Я в основном хочу, чтобы программа:

  1. Принимает входные данные от пользователя.
    Как? Всякий раз, когда пользователь вводит delete x y
    x и y представляют номер, присвоенный элементу в списке
  2. Удаляйте указанные элементы из списка всякий раз, когда пользователь вводит «удалить» (воспринимайте это как команду. Кроме того, это то же самое удаление из пункта # 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 программа должна выполняться внутри цикла, хотя вы, вероятно, это знали.