Как вывести по одному элементу из списка?

Задача: Создайте программу, которая будет выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка.

В интернете нашел некоторые способы, но я хочу понять, почему такой код не работает. На первый взгляд, все должно работать, но, очевидно, я что-то упусукаю). Впервые тут, извините, если что-то не так)

import random

a = [1, 1, 1, 2, 3, 4, 5]

while a:
    num = random.choice(a)
    for i in a:
        if i == num:
            a.remove(i)

    print(num)

Ответы (4 шт):

Автор решения: CrazyElf

Ваш код легко починить, достаточно итерироваться по копии списка:

for i in a.copy():
          ^^^^^^^

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

→ Ссылка
Автор решения: A_Vaclav

Обратите внимание на ваше условие: "На экране должны печататься без повторений все слова из представленного списка." Это можно решить через преобразование листа в множество. Множество в python - "контейнер", содержащий не повторяющиеся элементы в случайном порядке.

a = [1, 1, 1, 2, 3, 4, 5]
b = set(a)
for x in b:
    print(x)
→ Ссылка
Автор решения: MBo

Во-первых, для исключения дубликатов нужно сделать то, что @A_Vaclav со множеством посоветовал.

Во-вторых, для вывода очищенного списка в случайном порядке его можно перемешать с помощью функции shuffle

import random
a = [1, 1, 1, 2, 3, 4, 5]
a = list(set(a))
print(a)


random.shuffle(a)
for x in a:
    print(x)

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

n = len(a)
for i in range(n):
    id = random.randint(0, n - i - 1)
    a[n - i - 1], a[id] = a[id], a[n - i - 1]
    print(a[n - i - 1])
→ Ссылка
Автор решения: day383
import random

a = [1, 1, 1, 2, 3, 4, 5]

while a:
    num = random.choice(a)
    while num in a:
        a.remove(num)
    print(num, end=" ")
→ Ссылка