Python - выберите случайное имя из массива без повторений, пока все не будут выбраны - PullRequest
0 голосов
/ 09 июля 2019

Я только начал изучать Python, поэтому, если это что-то легко, я прошу прощения. Я хочу создать случайное имя из набора массивов имен, затем не повторять это имя снова, пока все не будут выбраны и цикл не начнется снова. Код ниже - это то, что у меня уже есть, это генерирует случайное имя, но повторение происходит.

import random

employee = ["adam", "Scott", "Michael", "Andrew", "Mark", "Fernando", "Faith", "Steve", "Lee", "Amani", "Liv", "Nick A", "James", "Jake", "Brett", "Graham", "Fraser", "Jacob", "Chelsea", "Phil", "George", "Charley", "Emma", "Steph"]
print(random.choice(employee))

Ответы [ 4 ]

1 голос
/ 09 июля 2019

Вы должны использовать random.shuffle(), чтобы перетасовать элементы в вашем списке:

import random

employee = ["adam", "Scott", "Michael", "Andrew", "Mark", "Fernando", "Faith", "Steve", "Lee", "Amani", "Liv", "Nick A", "James", "Jake", "Brett", "Graham", "Fraser", "Jacob", "Chelsea", "Phil", "George", "Charley", "Emma", "Steph"]
random.shuffle(employee)
for i in employee:
    print(i)

Вы можете использовать random.shuffle(), чтобы рандомизировать порядок вашего списка и повторять список снова столько раз, сколько вам нужно.

1 голос
/ 09 июля 2019

Должна работать одна из двух вещей, очень похожих:

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

(2) Используйте операции тасования из itertools, чтобы получить случайную перестановку списка. Итерируйте это. Когда вы доберетесь до конца, получите новую случайную перестановку.

0 голосов
/ 09 июля 2019

Вы можете попробовать это,

import random

employee = ["adam", "Scott", "Michael", "Andrew", "Mark", "Fernando", "Faith", "Steve", "Lee", "Amani", "Liv", "Nick A", "James", "Jake", "Brett", "Graham", "Fraser", "Jacob", "Chelsea", "Phil", "George", "Charley", "Emma", "Steph"]

employeecopy = employee

while len(employeecopy) != 0:
  chosen = random.choice(employeecopy)
  employeecopy = list(set(employeecopy) - set([chosen]))

Посмотреть в действии здесь

0 голосов
/ 09 июля 2019

Вы хотите использовать random.shuffle, как это происходит случайное перемешивание списка на месте

import random

employee = ["adam", "Scott", "Michael", "Andrew", "Mark", "Fernando", "Faith", "Steve", "Lee", "Amani", "Liv", "Nick A", "James", "Jake", "Brett", "Graham", "Fraser", "Jacob", "Chelsea", "Phil", "George", "Charley", "Emma", "Steph"]

# Make 10 rounds of random selections
for i in range(10):
    print(i)
    # Shuffle the list in new random order
    random.shuffle(employee)
    # Print a random employee without repetition in each round
    for random_employee in employee:
        print(random_employee)
...