Random.sample ile gelen elemanları karşılaştırma

merhaba!
Teams adlı listedeki elemanları random.sample modülü ile aldığımda resimdeki gibi bir sonuçla yani aynı eşleşmenin 2.bir defa oluşmaması için liste değişkenini küme olarak atadığımda hata alıyorum. Bu işlemi nasıl sonuçlandırabilirim. Yani range 5 olarak belirlediğimde bir takım diğer 5 takımla eşleşebilir yada takımlar birbirleriyle sadece birerkez eşleşebilir. Böyle bir çıktıyı nasıl alabilirim. Teşekkürler.


teams = ["Liverpool", "Manchester United", "Arsenal", "Barcelona", "Real Madrid", "Atletico Madrid"]

liste = [random.sample(teams, 2) for i in range(5)]
# kume = [i for i in set(liste)]
print(liste)

Merhaba,

Şöyle yapabilirsiniz:

import random


def group(array):
    result = []
    save = array
    while save:
        sample = random.sample(save, 2)
        result.append(sample)
        save = [i for i in save if i not in sample]
    return result


teams = [
    "Liverpool", "Manchester United", 
    "Arsenal", "Barcelona", 
    "Real Madrid", "Atletico Madrid"
]
        
print(group(teams))

bende soyle bir sey yazdim:

import random

teams = [
    "Liverpool", "Manchester United", 
    "Arsenal", "Barcelona", 
    "Real Madrid", "Atletico Madrid"
]


result = [ (teams[i],teams[j])  for i in range(len(teams)) for j in range(i,len(teams)) if j != i  ]

realresult = []

for i in range(5):
    randres = random.sample(result,1)
    if randres not in realresult:
        realresult.append(randres)

print(realresult)

:partying_face: :soccer:

Sn @dildeolupbiten ilginiz için teşekkür ederim. Ben sanırım eksik bildirimde bulundum. Tam olarak ne hedeflediğimi söylemek istiyorum. Örneğimden hareketle 10 takımlı bir lig (Sayı istendiğinde arttırılıp eksiltilebilir bir yapıda olmalı) oluşturuyorum diyelim. Bu 10 takımın her hafta 5 maç yapacağı 1 Futbol ligi ilk yarı fikstürü hazırlamak istiyorum. Yani ilk yarı boyunca takımlar birbirleriyle sadece bir kez karşılaşacaklar. ( Bu yüzden set yapısının uygun olacağını düşündüm ) Sonraki aşamada da yine random.randrange metodu ile bu maçlar için skorlar ürettireceğim. Sonra bu skorlar üzerinden takımlara puan verip bir puan durumu olusturacağım belki abartıp bir de sonuclara yönelik bahis oynattırabilirim:)

Sn @Abdullah_V Merhabalar, İlginiz için çok teşekkür ederim. Kodunuzu denedim şöyle bir sıkıntı var, kod her çalıştırılma da farklı sayıda maç üretiyor.

tekrardan merhaba.kusura bakmayin benim hatam.kodun duzenlenmis hali burada:

import random

teams = [
    "Liverpool", "Manchester United", 
    "Arsenal", "Barcelona", 
    "Real Madrid", "Atletico Madrid"
]


result = [ (teams[i],teams[j])  for i in range(len(teams)) for j in range(i,len(teams)) if j != i  ]
realresult = []
sayac = 0
while sayac<6:
    randres = random.sample(result,1)
    if randres not in realresult:
        realresult.append(randres)
        sayac += 1
print(realresult)

takildiginiz nokta olursa lutfen sormaktan cekinmeyin.

1 Beğeni

Sn @Abdullah_V ilginiz için gerçekten minnettarım. Konuları öğrenirken hayattan bir takım örnekler yaratmaya ve çözmeye çalışıyorum. Bu konuların kafamda daha rahat
çözüme kavuşmasını sağlıyor. Okuduğum Türkçe kaynaklardaki sorular hemen hemen birbirinin aynı bu yüzden alıştırmalar genelde tekdüze geliyor. Yazdığınız kodla ilgili anlamadığım bir nokta yok fakat şöyle bir sorum olacak izninizle bu 6 takım birbirleriyle sadece 1 maç karşılaştıklarında toplam yapılacak maçların sayısı 15 oluyor. Bu sayıyı while döngüsü içinde nasıl formülize edebiliriz elle yazmak yerine yani takım sayısını arttırıp eksilttiğimizde bır şekilde len fonksiyonu ile birlikte bir formül kullanmak gerekiyorki listedeki takım sayısı ne olursa olsun while
döngüsü hesaplamasını yapıp döngüden çıksın. Şu halinde ben
while sayac < 16:
diye yazsam haliyle dogal olarak kod sonuç üretmiyor.
Screenshot_7

teams = [
    "Liverpool", "Manchester United",
    "Arsenal", "Barcelona",
    "Real Madrid", "Atletico Madrid"
    ]
result = [(teams[i], teams[j]) for i in range(len(teams)) for j in range(i, len(teams)) if j != i]
realresult = []
weekResult = []
sayac = 0

while sayac < 15:
    randres = random.sample(result, 1)
    if randres not in realresult:
        realresult.append(randres)
        sayac += 1
for r in realresult:
    print(r)

anladigim kadariyla takimlarin sayi degismesi ile while dongusunu her seferinde degistirmiyelim diyorsunuz.bu durumda while dongusune ihtihac yok.ben sadece while dongusunu istediginiz sayida takimi gostermek icin yazdim.yani boyle olucak:

import random

teams = [
    "Liverpool", "Manchester United", 
    "Arsenal", "Barcelona", 
    "Real Madrid", "Atletico Madrid"
]
result = [ (teams[i],teams[j])  for i in range(len(teams)) for j in range(i,len(teams)) if j != i  ]

print(result)

takimlarin sayini degistirseniz bile her seferinde dediginiz kanuna uygun mumkun olan tum eslesmeleri gostericek.

Sample’siz oluyor mu?

import random
from pprint import pprint

teams = ["Liverpool", "Manchester United", "Arsenal", "Barcelona", "Real Madrid", "Atletico Madrid"]
random.shuffle(teams)

result = [teams[i:i+2] for i in range(len(teams)) if i % 2 == 0 ]

pprint(result)

Merhaba @reo Sample olmadan çözümler üretildi sizin kodunuzda sadece takımlar birer maç yapıyor normalde her takım diğer takımlarla en az 1 en çok 2 maç yapcak şekilde çözüm üretmem gerekiyor. İlginiz için tekrar teşekkürler.