koddla

Yazılımcıları bilgi ile güçlendirir.

Python’da listeden rastgele bir öğeyi nasıl seçebilirim?

Aşağıdaki listeye sahip olduğumu varsayalım:

foo = ['a', 'b', 'c', 'd', 'e']

Bu listeden rastgele bir öğe almanın en basit yolu nedir?

random.choice() kullanabiliriz:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

Şifreleme açısından güvenli rastgele seçimler için ise (örneğin, bir sözcük listesinden parola oluşturmak için), secrets.choice() kullanılabilir:

import secrets

foo = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(foo))

secrets Python 3.6’da geldi. Bu yüzden Python’un eski sürümlerinde random.SystemRandom sınıfı kullanılabilir:

import random

secure_random = random.SystemRandom()
print(secure_random.choice(foo))

Birden fazla rastgele öğe seçmek

Listeden rastgele birden fazla öğe seçmek istiyorsanız, bunun yerine random.sample kullanmanızı öneririm.

import random
listem = {'a', 'b', 'c', 'd', 'e'}         
secme_sayisi = 2                           
rastgele_ogeler = random.sample(listem, secme_sayisi)
ilk_rastgele_oge = rastgele_ogeler[0]
ikinci_rastgele_oge = rastgele_ogeler[1] 

Yine de listeden yalnızca tek bir öğe çekiyorsanız, random.sample kullanmak yerine daha az hantal olan random.choice kullanmak daha mantıklı olacaktır.


Dizine de ihtiyacınız varsa random.randrange kullanın

from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])

Listeden rastgele öğe çıkararak listeyi boşaltma

Liste boşalana kadar rastgele öğeleri çekip listeyi boşaltmak için aşağıdaki kodu kullanabiliriz:

s=set(range(1,6))
import random

while len(s)>0:
  s.remove(random.choice(list(s)))
  print(s)

Bu kodu üç kere çalıştırırsak aşağıdaki çıktıyı alırız:

>>> 
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>> 
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])

>>> 
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top