Listedeki eleman sayımından max elemanı almak


#1

Merhaba.

def kesişim(): 
    test3 = [eleman for eleman in test1 if eleman in test2]
    if test3!=[]:
        print(test3, len(test3))

Buradan

a=max( len(test3))

almak istiyorum. Yani tüm len(test3)'leri değil, yalnızca en yüksek sayıdaki len(test3)'leri almak istiyorum.
“TypeError: ‘int’ object is not iterable” hatası alıyorum. Çözüm bulamadım. yardım lütfen.


#2

Max fonksiyonu parametre olarak iterable öğeler alır. len fonksiyonu sayı döndüreceğinden ve sayılar da iterable olmadığından hata aldınız. Şöyle olmalı:

a = max(test3)

#3

Erdem1 arkadasimizin yazdiklari dogru. max() fonksitonu iterable ogeler alir.

En yuksek sayida kac elemani almak istiyorsunuz? Sorun eger bu ise en yuksek 2 elemani 3 elemani almak istiyorum gibi birden fazla yontemle yapabilirsiniz.

  1. Cikan listeyi sort() edersin, istedigin en buyuk sayilari alirsin. Ornegin en buyuk 2 sayi listen[:-2] gibi

  2. max(listen) buradan en buyuk sayiyi bulursun. Sonra listeden listen.remove(en_buyuk_sayi) cikarip tekrardan max(listen) seklinde yapabilirsin.

Listende ayni elemanlar var ise set() ile duplicate ogeleri kaldirip islemleri yapabilirsin…

Yanlis anlamis olabilirim. Ama bunlarda cozum olarak kalsin.


#4

a = max(test3) hata vermiyor, ama sorunumu da çözmüyor. Kodların tamamı şöyle:

c = "ömer bal yedi mi"
test1=c.split()

def intersection(): 
    test3 = [eleman for eleman in test1 if eleman in test2]
    if len(test3)>1:### bana burası max() olarak lazım!
        print(test2)#tablodan alınan değer
        print(test3, len(test3))
        
im.execute("select algi from ana desc")
for i in range(50):    
    a=im.fetchone()
    b=','.join(map(str, a))
    test2=b.split()
    
    intersection()

Bu kodlar, tablomdan sorguladıkları ile “c” yi kesiştirip şu sonuçları döndürüyor:

['kaya', 'bal', 'yedi']
['bal', 'yedi'] 2
['ömer', 'kara', 'kabak', 'yedi']
['ömer', 'yedi'] 2

2 veya daha yüksek kesişim sonucunu, “max(tekst3)” ile almayı umuyordum ama, bana yalnızca tek sonuç döndürüyor: “ömer” ve “yedi”.
İstediğim, " if len(test3)>1:" ifadesi yerine"if len(test3) != []" kullanarak “2” sonucunu almak. Çünkü başka sorgularda 3, 4 … kesişme bulunabilir ve bana bunların max. sayısı lazım.
Vaktiniz ve emeğiniz için teşekkürler.


#5

Tüm len(test3)'leri bir listeye atıp daha sonra bu listeyi max(liste) şeklinde max fonksiyonuna verirseniz istediğinizi alabileceğinizi düşünüyorum. Hatta listeyi sıralarsanız en büyük değerler en başta olacak şekilde bir liste de elde edebilirsiniz.


#6

Katkılarınız için çok teşekkür ederim. Son hali şöyle:

c = input("Bişeyler yaz: ")

test1=c.split()
test3=[]
bulunan_değerler = []
bulunan_sözlük = {}

def intersection():
    test3 = [eleman for eleman in test1 if eleman in test2]
    for i in range(2,9):
        if len(test3)== i:
            bulunan_sözlük[len(test3)]= test3
            print(test3, len(test3))
            bulunan_değerler.append(len(test3))
      
    
im.execute("select algi from ana desc")
for i in range(50):    
    a=im.fetchone()
    b=','.join(map(str, a))
    test2=b.split()
    
    intersection()

ençok = max(bulunan_değerler)#En fazla sayıda eşleşen kelimelerin sayısı
son_değer = bulunan_sözlük.get(ençok, None)#Max values değerli elemanı liste
                                            #olarak alıyoruz.
son = ','.join(son_değer)
print(son)