Как удалить элемент из списка в Python, когда элемент содержится в переменной - PullRequest
0 голосов
/ 10 января 2019

Я новичок в программировании и только что закончил курс первого курса для UNI. Рассматривая последние детали моей курсовой работы, я столкнулся с проблемой, на которую пока не нашел ответа о переполнении стека.

У меня есть список с именем cL (coloursList), и я пытаюсь удалить один элемент из этого списка, элемент, который содержится в переменной с именем "colour2", которая вводится пользователем через оболочку с помощью "ввода" метод.

Я нашел способы удаления элементов из списка, используя list.remove (x) или list.pop (x), ссылаясь на сам элемент (предоставляя имя элемента в виде строки) или позицию индекса элемента в списке.

Вот так выглядит фрагмент кода, с которым я работаю:

    # more code before this

    cL = ["red", "green", "blue", "magenta", "orange", "pink"]

    elif colour2 == colour1:
        cL = cL.remove(colour2)
        print("\nPlease select a different colour than previous one:\n", cL) 
        colour2 = str(input("Please re-enter second colour: "))

    # more code to follow

По сути, я пытаюсь добиться того, чтобы, когда пользователь вводит 2-й или 3-й цвет, который ему предлагается в оболочке, если он вводит цвет, который ранее использовал в списке, я пытаюсь удалить этот цвет из списка, затем представьте новый исправленный список пользователю, чтобы он знал, какие цвета он оставил на выбор.

Очевидно, что этот фрагмент кода, который я пробовал, не работает

cL = cL.remove(colour2)

И я пытаюсь выяснить, какие есть варианты в достижении этой задачи.

Большое спасибо!

******* ОБНОВЛЕНИЕ, СОДЕРЖАЩЕЕ полный код (для любопытных людей) *******

******* Задание выполнено с помощью сообщества STACK OVERFLOW *******

    cL = ["red", "green", "blue", "magenta", "orange", "pink"]

print("\nAvailable colours to choose from:\n", cL)
colour1 = str(input("Please enter FIRST colour: ")).lower()
while True:
    if colour1 not in cL:
        print("\nInvalid colour.\nPlease choose a colour from list:\n", cL)
        colour1 = str(input("Please re-enter a valid FIRST colour: "))\
                      .lower()
    else:
        cL.remove(colour1)
        break

print("\nGREAT WORK! Remaining valid colours to choose from are:\n", cL)        
colour2 = str(input("Please enter SECOND colour: ")).lower()
while True:
    if colour2 not in cL:
        print("\nInvalid colour.\nPlease choose a colour from list:\n", cL)
        colour2 = str(input("Please re-enter a valid SECOND colour: "))\
                      .lower()
    else:
        cL.remove(colour2)
        break

Так выглядит мой законченный код подтверждения ввода цвета (для первого и второго цветов). Подумал, что это может помочь кому-то, кто имеет подобную задачу, чтобы выполнить в будущем.

* Ввод цвета может быть [нижний регистр], [ВЕРХНИЙ СЛУЧАЙ] или [A MiX oF bOtH], и если пользователь не выберет один из представленных ему цветов перед выбором любого из цветов, он застрянет в цикл с просьбой выбрать правильный цвет из представленного списка.

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Итак, насколько я понимаю, у вас есть список цветов, и вы хотите, чтобы пользователь начал выбирать цвета из этого списка, и если он выбирает цвет, которого нет в списке, или цвет, который он уже выбрал , он должен сказать ему, чтобы выбрать другой цвет.

Если это так, то это выглядит так

colors_list = ["red", "green", "blue", "magenta", "orange", "pink"]
colors_chosen = []

while colors_list:
    print("Please select a color from this list: {}".format(colors_list))
    color_selected = input()

    while color_selected not in colors_list:
        print("The color selected is not one of the options")
        print("Please select a color from this list: {}".format(colors_list))
        color_selected = input()

    colors_list.remove(color_selected)
    colors_chosen.append(color_selected)

print("These are the colors you chose: {}".format(colors_chosen))

Итак, у нас есть список всех возможных цветов, и мы используем цикл, который будет повторяться, пока этот список не пуст (вы можете заменить цикл while на цикл for, если вы только хочу, чтобы пользователь выбрал n цветов вместо всех). Внутри этого цикла мы будем спрашивать пользователя о цвете, и если это не цвет, который находится внутри списка, он перейдет в цикл while, пока пользователь не выберет правильный цвет, который находится внутри списка. Как только пользователь выберет правильный цвет, мы удалим указанный цвет из списка и добавим его в список, где будем хранить цвета, выбранные пользователем. Повторяйте этот процесс, пока список цветов не станет пустым и все.

Возможно, вы захотите отобразить разные сообщения, если пользователь напечатал что-то, что не является цветом (например, «машина» или что-то в этом роде), или если он напечатал цвет, который он / она уже выбрал ранее. Для этого вам нужно проверить, нет ли слова, набранного пользователем, в списке цветов, но в списке выбранных слов, затем выведите «Вы не можете выбрать слово, которое уже выбрали!», и если его нет ни в одном списке, выведите «Вы должны выбрать реальный цвет!».

Надеюсь, это поможет!

0 голосов
/ 10 января 2019

Вы были почти там.

Метод list.remove () изменяет список, но не возвращает сам измененный список.

Так что если вы делаете следующее:

cL.remove(colour2)
print(cL)

это должно дать вам желаемый ответ.

0 голосов
/ 10 января 2019

Поскольку вы не ограничены только colour2, но хотите сделать то же самое несколько раз, я предлагаю более общее решение, которое будет работать для любого количества входов, если вы не введете q

cL = ["red", "green", "blue", "magenta", "orange", "pink"]
deleted = []

while True:
    colour = input("Please enter a colour to delete: (press q to quit)")
    if colour == 'q':
        break
    if colour not in deleted:
        cL.remove(colour)
        deleted.append(colour)
    else:
        print ("%s already deleted. Try entering another color" %colour)

Пример вывода

Please enter a colour to delete: (press q to quit)red
Please enter a colour to delete: (press q to quit)red
red already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)green
Please enter a colour to delete: (press q to quit)pink
Please enter a colour to delete: (press q to quit)red
red already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)green
green already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)q
0 голосов
/ 10 января 2019

Еще один способ сделать это:

colour2 = str(input("Please re-enter second colour: "))    
cL = [x for x in cL if x != colour2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...