Примечание: Возвращайте все товары только один раз, но выбирайте случайным образом. Элемент не должен повторяться на выходе

#python #list

Вопрос:

Я хочу вывести все элементы из списка (по 1 элементу за раз), но в случайном порядке и не повторяясь в выводе, элемент, который уже повторен, не должен отображаться снова.

вот что я получил, но в моем выводе я каждый раз получаю дубликаты.

 import random
fruits = ['apple','banana','dragonfruit','kiwi','loganberry','mandarin','mango','pineapple']
for fruit in fruits:
    fruit = random.choice(fruits)
    #do something
    print(fruit)

output:
banana
apple
mango
kiwi
mango
dragonfruit
banana
banana
 

я пробовал, random.choice(), random.shuffle(), random.sample(). но всегда получаю дубликаты в выводе. как я могу это решить? кроме того, я уже искал stackoverflow для возможных решений, но в этих примерах в качестве конечного результата выделяется только 1 элемент.

Комментарии:

1. random.shuffle() не даст вам дубликатов, если у вашего ввода нет дубликатов

2. хорошо, то, как я использовал random.shuffle (), было неверно. приведенный ниже пример помог мне решить эту проблему. очень ценю ваш комментарий. Спасибо, Хоббс.

Ответ №1:

Используйте shuffle модуль «Из случайного», чтобы вам было проще —

 random.shuffle(fruits)
for fruit in fruits:
    
    #do something
    print(fruit)
 

Это не дало бы никаких дубликатов, но даст, если в списке будут какие-либо дубликаты. (См. Комментарий @hobbs)

Ознакомьтесь с документами для получения дополнительных методов, подобных этому.

Результат:

 pineapple # Of course next time different result
banana
apple
dragonfruit
mango
loganberry
kiwi
mandarin
 

Комментарии:

1. Спасибо, что показали пример! Я неправильно использовал random.shuffle (). действительно ценю это.

Ответ №2:

Самый простой способ:

 import random
fruits = ['apple','banana','dragonfruit','kiwi','loganberry','mandarin','mango','pineapple']
for f in random.sample(fruits, len(fruits)):
    print(f)
 

дисплеи (ну, одна из возможностей):

 banana
kiwi
apple
mandarin
dragonfruit
loganberry
mango
pineapple
 

Обратите внимание, что это никоим образом не изменяет исходный список.

Ответ №3:

Просто удалите использованные фрукты из списка опций.

 import random
fruits = ['apple','banana','dragonfruit','kiwi','loganberry','mandarin','mango','pineapple']
fruitsCopy = fruits.copy()
for fruit in fruits:
    fruit = random.choice(fruitsCopy)
    fruitsCopy.remove(fruit)
    print(fruit)