Seleccionar item aleatoriamente de uma lista em Python

Rayven Esplanada 10 outubro 2023
  1. Utilize o módulo random para seleccionar um item aleatório a partir de uma lista em Python
  2. Utilize o módulo secrets para seleccionar um item aleatório a partir de uma lista em Python
  3. Utilize o módulo NumPy para seleccionar um item aleatório a partir de uma lista em Python
Seleccionar item aleatoriamente de uma lista em Python

Este tutorial mostra-lhe como seleccionar um item aleatório a partir de uma lista em Python. Existem múltiplas formas simples de o conseguir, todas elas envolvendo a importação de módulos em Python.

Este tutorial cobrirá soluções que requerem os módulos random, secrets, e NumPy.

Note-se que todas estas soluções que serão apresentadas farão uso de pseudo geradores de números aleatórios (PRNG).

Utilize o módulo random para seleccionar um item aleatório a partir de uma lista em Python

O módulo mais comum utilizado para randomização é o módulo random. Este módulo implementa funções de utilidade pseudo-aleatória para apoiar operações que envolvam aleatorização.

Digamos que queremos escolher um nome aleatório de uma lista, como se fosse uma votação.

["John", "Juan", "Jane", "Jack", "Jill", "Jean"]

Para escolher um nome aleatório a partir desta lista, utilizaremos random.choice(), que seleccionará um item a partir dos dados disponíveis que são dados.

import random

names = ["John", "Juan", "Jane", "Jack", "Jill", "Jean"]


def selectRandom(names):
    return random.choice(names)


print("The name selected is: ", selectRandom(names))

A saída, evidentemente, será variável e aleatória. Portanto, pode ser qualquer um dos seis nomes que são armazenados dentro de names variáveis.

Utilize o módulo secrets para seleccionar um item aleatório a partir de uma lista em Python

O módulo secrets é utilizado essencialmente para o mesmo fim que o random. No entanto, o secrets fornece um método criptográfico seguro de implementação do PRNG.

Em aplicações da vida real como o armazenamento de palavras-passe, autenticação, encriptação e desencriptação, e tokens. Os secrets são muito mais seguros do que utilizar o random, uma vez que só é bom para simulações ou operações que não lidam com dados sensíveis.

Neste problema, ambos os módulos fornecem o mesmo valor, uma vez que não estamos a lidar com quaisquer dados sensíveis e estamos a fazer isto para simulação.

Vamos utilizar a mesma lista de names para este exemplo. O secrets também tem uma versão da função choice() que produz a mesma saída variável que random.choice().

import secrets

names = ["John", "Juan", "Jane", "Jack", "Jill", "Jean"]


def selectRandom(names):
    return secrets.choice(names)


print("The name selected is: ", selectRandom(names))

Utilize o módulo NumPy para seleccionar um item aleatório a partir de uma lista em Python

O módulo NumPy também tem funções utilitárias para aleatorização e tem algumas ferramentas expansivas como argumentos para a sua função choice().

Mais uma vez, utilizaremos a mesma lista de names para demonstrar a função numpy.random.choice().

import numpy

names = ["John", "Juan", "Jane", "Jack", "Jill", "Jean"]


def selectRandom(names):
    return numpy.random.choice(names)


print("The name selected is: ", selectRandom(names))

A função retornará a mesma saída variável que os outros dois módulos produzidos.

A função NumPy também fornece outros argumentos para choice() para gerar múltiplas saídas sob a forma de lista.

O segundo argumento aceita um valor inteiro para determinar quantos itens aleatórios devem retornar. Digamos que queremos devolver 4 itens aleatórios da lista names.

def selectRandom(names):
    return numpy.random.choice(names, 4)


print("The names selected are: ", selectRandom(names))

Amostra de resultados:

The names selected are: ['John', 'Jill', 'Jill', 'Jill']

Há uma probabilidade de que o mesmo item seja repetido mais do que uma vez no resultado aleatório.

Se preferir que os itens do resultado sejam únicos, podemos passar um terceiro argumento boolean, permitindo a amostragem aleatória sem substituição.

def selectRandom(names):
    return numpy.random.choice(names, 4, False)

Saída de amostras:

The names selected are: ['Jill', 'John', 'Jack', 'Jean']

A função produzirá sempre uma lista única sem qualquer item duplicado.

Uma grande desvantagem se adicionarmos o terceiro argumento é o tempo de execução da função, uma vez que executa uma tarefa adicional para verificar duplicados e substituí-los por um item que ainda não existe dentro dos resultados.

Em resumo, a selecção de itens aleatórios a partir de uma lista Python pode ser conseguida através da utilização de um destes três módulos: random, secrets, ou NumPy. Cada um deles tem os seus benefícios e desvantagens.

Se quiser ter um método PRNG criptograficamente seguro, então os secrets são o melhor módulo para isso. Se o seu objectivo for apenas a simulação ou a manipulação de dados não sensíveis, utilize o random ou o NumPy. Se quiser mais do que um único resultado aleatório, então utilize NumPy.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artigo relacionado - Python List