Как удалить строковый элемент из списка в Python .remove у меня не работает - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь удалить строки из списка после того, как они были выбраны, чтобы избежать повторного получения того же слова, но когда я пытаюсь .remove или .pop, оно не удаляет слово. Почему это так и как я могу это отсортировать?

Я также пытался создать копию слова, если оно было удалено, прежде чем вернуть слово из функции. Повлияет ли это на слово, если оно уже выбрано?

Спасибо за любую помощь, я новичок в программировании, как вы могли бы сказать!

def choose_a_word_easy():  # function for choosing random  easy word.
    words = ['ant', 'bee', 'cat', 'dog', 'egg', 'hat', 'golf', 'jelly', 'king', 'bird', 'hot', 'cold', 'fish', 'log',
             'dad', 'mum', 'goal', 'help', 'file', 'neat', 'car', 'moon', 'eye', 'tree', 'rice', 'ice', 'speed', 'rat',
             'water', 'rain', 'snow', 'spoon', 'light', 'gold', 'zoo', 'oil', 'goat', 'yoga', 'judo', 'japan', 'hello']

    pick = random.choice(words)  # randomly choose any word from the list.
    # p1 = pick
    words.remove(pick)
    return pick

1 Ответ

1 голос
/ 21 февраля 2020

Объявляя ваш список внутри функции choose_a_word_easy, новый список создается при каждом вызове. Вы хотите, чтобы один и тот же список использовался при каждом вызове. Сделайте это, создав список вне области действия функции и передав его в качестве аргумента.

words = ['ant', 'bee', 'cat', 'dog', ...]

def pick_and_remove(lst):
    pick = random.choice(lst)
    lst.remove(pick)
    return pick

pick = pick_and_remove(words)

print(pick) # 'bee'
print(words) # ['ant', 'cat', 'dog', ...]

Обратите внимание, что вашу функцию можно сделать несколько более эффективной, если случайным образом выбрать индекс и открыть его.

def pick_and_remove(lst):
    i = random.randrange(len(lst))
    return lst.pop(i)
...