Python Benzersiz Sayı Karışık Eşitlik Kontrolü

Merhaba Arkadaşlar,

veritabanımda 3 farklı sütün var.

numara1 , numara2 --> bu sütunlar da bir birine benzer olan sayılar var (random üretecegim)

ve karşılaştır sütunu

numara1 numara2
01 --------------38
09. --------------33
22. -------------- 01
01 -------------- 38

numara1 den benzersiz 2 sayı alıyorum ve numara2 dende benzersiz 2 sayı alıyorum

numara1 numara2
01 --------------38
09 -------------- 33

birde bu numaraları karşılatırlacağım karşılaştır sütununda 4 adet sayı var

karşılaştır
04
01
09
38

numara1ve2 den alınan 4 sayı ile karşılaştır sütünündaki sayıların kontrol edilip 4 te 3 eşlendi eşleşenler şunlar 01,09,38 gibi kontrol edilip yazdırmak istiyorum

takıldığım yer numara1ve2 ile karşılaştır sütunundaki verilerin karşılaştırılması ve eşleşenlerin sonuç

konusunda örnek kod ?

Şöyle yapabilirsiniz:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import random


def eslestirme(r, n, cl):
    random_numbers = lambda p: list(set(map(
        lambda i: random.randint(1, r), range(n))))
    while True:
        s1 = random_numbers(n)
        if len(s1) == n:
            break
    print(f"Sütun 1: {s1}\n")
    s2 = list(filter(lambda i: i not in s1, random_numbers(n)))
    while len(s1) != len(s2):
        number = random.randint(1, r)
        if number not in s1 and number not in s2:
            s2.append(number)
    print(f"Sütun 2: {s2}\n")
    print(f"Kontrol listesi: {cl}\n")
    gruplandir = list(map(
        lambda i: [s1[i], s2[i], s1[i + 1], s2[i + 1]],
        range(0, len(s1), 2))
    )
    print(f"Gruplandirilmis liste: {gruplandir}\n")
    eslesmeler = list(map(
        lambda m: list(filter(lambda k: k in cl, gruplandir[m])),
        range(len(gruplandir)))
    )
    for e in eslesmeler:
        print(f"4'te {len(e)} eşleştirme. Eşleşenler: {e}")


eslestirme(r=100, n=20, cl=[4, 1, 9, 38])

Çıktı:

Sütun 1: [69, 38, 37, 9, 42, 10, 12, 76, 28, 92, 16, 18, 82, 21, 85, 53, 56, 58, 60, 30]

Sütun 2: [1, 67, 4, 5, 6, 71, 40, 72, 78, 80, 81, 19, 20, 52, 57, 90, 31, 51, 73, 13]

Kontrol listesi: [4, 1, 9, 38]

Gruplandirilmis liste: [[69, 1, 38, 67], [37, 4, 9, 5], [42, 6, 10, 71], [12, 40, 76, 72], [28, 78, 92, 80], [16, 81, 18, 19], [82, 20, 21, 52], [85, 57, 53, 90], [56, 31, 58, 51], [60, 73, 30, 13]]

4'te 2 eşleştirme. Eşleşenler: [1, 38]
4'te 2 eşleştirme. Eşleşenler: [4, 9]
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
4'te 0 eşleştirme. Eşleşenler: []
1 Like

“Sutun” dedigin birbirinden bagimsiz tablolarin sutunlari mi?

Neden numara1 ve numara2’den 2’ser sayi aliyorsun?

Bi de bunlarin yaninda ne yapmaya calistigini da soylersen belki daha cok yardimci olabiliriz.

sqlite> SELECT * FROM n1;
1
9
22
1
sqlite> SELECT * FROM n2;
38
33
1
38
sqlite> SELECT * FROM k;
4
1
9
38
sqlite> SELECT SUM((r1.n1 IN (SELECT k FROM k)) + (r2.n2 IN (SELECT k FROM k))) / CAST(c.c AS FLOAT) FROM (SELECT ROW_NUMBER() OVER (ORDER BY n1) AS rn, n1 FROM n1 LIMIT 2) r1, (SELECT ROW_NUMBER() OVER (ORDER BY n2) AS rn, n2 FROM n2 LIMIT 2) r2, (SELECT COUNT(*) AS c FROM k) AS c WHERE r1.rn = r2.rn;
0.75

Gordugun gibi gereksiz derecede karmasik ve okumasi hayli zor.

O yuzden ne yapmaya calistigini anlatirsan daha kolay yardimci olabiliriz.

n1 ile n2 kolonunun yan yana degil alt alta gelmesi lazim.

guruplandırılmış liste 1 tane olacak tek gurup ve sütün bir ile sütün 2 den gelen benzersiz sayıları alarak kontrol listesi ile karşılaştırılacak