TypeError: argument of type 'int' is not iterable hatası

def control_num(num) :
	return 1 in num

my_num_list = [0,1,0,1,0,1,0,1,0,1,1,0,1,0,1]

result = list(map(control_num,my_num_list))
print(result)

hata = TypeError: argument of type 'int' is not iterable
Yardımcı olursanız sevinirim

Sanırım bu 0 ve 1’lerin dolu olduğu bu listeden sadece 1’lerin dönmesini istiyorsunuz.

İsteğiniz doğrultusunda bu kullanım yanlış. Çünkü bu sadece bir tane argüman alabilen bir fonksiyon ve siz bu argümana liste atamaya çalışmışsınız.
*num yaparsanız liste atayabilirsiniz (liste diyorum ancak aslında tuple atanıyor).

Bir diğer yanlış kullanım da

burası. Yani isteğiniz doğrultusunda yanlış. Böyle yaparsanız result listesindeki değerler size True False olarak gelecektir.

Ben aşağıdaki gibi bir yöntem izledim.

def control_num(*num):
    for i in num:
        if i:
            return i
        
my_num_list = [0,1,0,1,0,1,0,1,0,1,1,0,1,0,1]
result = list(map(control_num,my_num_list))
while True:
    try:
        result.remove(None)
    except:
        break
print(result)

Bu control_num fonksiyonu sadece True olan değerleri return edecek ve dolayısıyla da False olan değerlere bir şey yapılmayacağı için onların değeri None olacak. O None’ları da temizlemek için bir while döngüsü kullandım. result listesinden None’lar hata verene kadar kaldırılsın demek oluyor.


Tam olarak sizin hata alma sebebinize de değineyim.

Yine bu hatanın sebebi de bu fonksiyondur. argüman olarak num yerine *num kullanırsanız hata vermeyecektir çünkü *num kullandığımız zaman bu argüman iterable olacağı için map fonksiyonu da rahat rahat dönebilecek ve hata vermesine gerek kalmayacaktır.

2 Beğeni

Merhaba, map fonksiyonu anladığım kadarıyla listeyi komple değil, listenin her bir elemanını sırasıyla ilgili fonksiyona (control_num) gönderiyor.

Yani num parametresi bir liste değil, listeden sırasıyla gelen bir eleman oluyor. Dolayısıyla aşağıdaki gibi kodlar çalıştırılabilir. Fakat amacınıza uyar mı onu bilmem

def control_num(num) :
	return num==1

my_num_list = [0,1,0,1,0,1,0,1,0,1,1,0,1,0,1]

result = list(map(control_num,my_num_list))
print(result)
4 Beğeni

1 lerin True, 0 ların false dönmesini istiyorum Aynı liste içerisinde

1 Beğeni

O halde bu iki yöntem de işinize yarıyor :

def control_num(*num) :
	return 1 in num

my_num_list = [0,1,0,1,0,1,0,1,0,1,1,0,1,0,1]

result = list(map(control_num,my_num_list))
print(result)


2 Beğeni

Aslında :

def sea(s):
    return s           

print(sea([1,2,3]))

Çıktı => [1, 2, 3]
Evet gönderiliyor. Biraz hatalı bir yanıt vermişim, üzgünüm.


Konu sahibinin belirttiği şekilde bir hata almasının sebebini şöyle göstereyim :

def control_num(num):
    return type(num)

my_num_list = [0,1,0,1,0,1,0,1,0,1,1,0,1,0,1]

result = list(map(control_num,my_num_list))
print(result)

çıktı :

[<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>]



def control_num(*num):
    return type(num)

my_num_list = [0,1,0,1,0,1,0,1,0,1,1,0,1,0,1]

result = list(map(control_num,my_num_list))
print(result)

çıktı :

[<class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>, <class 'tuple'>]

Hatayı da tekrardan belirteyim burada. Durumun daha rahat fark edilmesi açısından.
TypeError: argument of type 'int' is not iterable


@great_khali Hatalı bir yorumda bulunduğum için sizden özür diliyorum. Yukarıda belirttiğim durumu incelerseniz asıl hatanın anlaşılacağını düşünüyorum.