Oranla rastgele eleman seçme

python ile liste içerisinki elemanları belli bi oranla rastgele nasıl seçebiliriz

Orandan kastın ne?

https://docs.python.org/3/library/random.html#random.choices

2 Beğeni

galiba ogelerin hangi oranla gelecegini kendimiz ayarliyalim diyor(ornek: %80 bir ogenin gelme ihtimali %20 diger oge)

aklima gelen tek yol su:oranlamayi liste icinde yapin daha sonra random ile listeden secin
orn:

import random
liste = [1,1,1,1,2]
print(random.choices(liste))

random ile listeden bir oge sectigimizde ‘1’ ogesinin gelme ihtimali:80%, ‘2’ ogesinin gelme ihtimali 20%

1 Beğeni

Girilen orana gore ayni itemlerden eklenip ondan sonra seçme yapilsin

aslinda bu mantiga gore kendi metodunuzuda yazabilirsiniz

Collections dan counter kullanarak itemlerin sayisina bakariz ona gore de oran yapar ekleriz listeye sonra random bir sekilde seceriz :wink:

1 Beğeni

evet onu diyorum.

1 Beğeni

Egzersiz yapmak için iyi ama Python’da standard library’de de var:

import random
liste = [1, 2]
weights = [0.8, 0.2]
print(random.choices(liste, weights))

1000 kere çalıştırırsanız ~800’ünde 1 gelir.

4 Beğeni

Cevabı @anon18277073 vermiş, ben de bir örnek vereyim:

>>> import random
>>> random.choices([1, 2, 3, 4], # rastegele eleman seçeceğimiz dizi
	     weights = [1, 2, 4, 8], # sırasıyla her elemanın seçilme olasılığı, göreceli olarak. yani 4 sayısının çıkma olasılığı 1 sayısının çıkma olasalığından 8 kat fazla (8/1)
	                            )
[4]
>>> 

(O da benden birkaç saniye önce örnek attı.)

4 Beğeni

Metod random modülüne random modülü de standart libde :slight_smile:

2 Beğeni

bunun icin hazir bir sey bulundugunu bilmiyordum.ogrenmis oldum @anon18277073 tesekkurler

1 Beğeni

Built in degil bu standart libdeki random modulunun bir fonksiyonu


Mesela tkinter da standsrt libde ama bazi linux distrolarinda default gelmiyor

Haklısınız, düzelttim, teşekkürler

1 Beğeni

Hatta Yaziyim:

def myfunc(liste,oran):
    import random # boylece bu fonksiyonu kullanmak icin randomu ayrica import etmek gerekmiyecek(localda olmasina dikkat)
    yeni = []
    for i in range(len(liste)):
        for j in range(oran[i]):
            yeni.append(liste[i])
        return random.choices(yeni) # burada isteginize gore sadece listeyide dondure bilirsiniz 


myfunc([1,2,3,4],[10,0,80,10])

orjinal listenin uzerinde degisiklik yapmamasina dikkat.boyle daha ise yarar olacagi icin orjinal listenin uzerinde degisiklik yapmadim.