İç içe 5 tane for döngüm var ve bunlar olabilecek tüm kombinasyonları yapıp bir veri havuzu içerisinde arama yapıyorlar. Doğal olarak veri havuzunda hiç olmayan kombinasyonlarda ortaya çıkıyor ve bunlar çok fazla oluyor. Veri havuzunda 300.000 data var, Kombinasyonların sayısı 25 Milyon.
Sizden isteğim, eğer for döngüsü n kadar dönüp bir sonuca eşleşmiyorsa 1. for döngüsüne devam etsin istiyorum. Yada eşleşmeyen dataları çıkarmak istiyorum.
sayac = 0
for i in datas:
sayac += 1 # Döngü her çalıştığında sayı 1 artıyor bu sayede ne kadar çalıştığını anlayabiliyoruz
if sayac > 10:
break #10 kez çalıştı ama bir sonuca varamadı ise döngüden çıkıyoruz
if in == i:
break #bir sonuca vardıysa çık
for data1 in query1:
for data2 in query2:
for data3 in query3:
for data4 in query4:
for data5 in query5:
for search_data in all_data:
sayac += 1
if sayac == 300000:
#ilk for döngüsünden devam, gibi.
Yani burda ilk for döngüsünde ki data1, search_data’nın ilgili alanı ile eşleşmediği zaman mecbur diğer forların bitmesini bekliyor ve zaman kaybı oluyor. Bende eğer şu kadar dönmüş ve eşleşmemiş ise birinci forun bir sonraki değerine geçmesini istiyorum.
Hımm…
O zaman işler karışır ve fonksiyonlara bulaşırsınız. Bakın emin değilim, bilmiş olun.
def data1_arama(in):
for i in data1:
if in == i:
return True
return False
def data2_arama(in):
for i in data2:
if in == i:
return True
return False
def data3_arama(in):
for i in data3:
if in == i: return True;
return False
while True:
veri = input()
if data1_arama(veri):
print("bulundu")
break
elif data2_arama(veri):
print("Bulundu"); break
elif data3_arama(veri):
print("bulundu"); break
else:
print("bulunamadı")
3’ten fazla döngüyü içiçe kullanmak hiç iyi bir uygulama değil. Hatta ikiyi bile geçmemeli, ideal durumda ise tek seviye olmalı. Mantıksal (boolean) değişkenler kullanarak istediğiniz seviyeye geçmeniz mümkün ancak bu, işleri çok karmaşıklaştıracaktır. Bunun yerine verileri düz hale getirerek (tek seviye bir liste ya da sözlük gibi) tek bir döngü ile işinizi halletmeniz daha iyi olacaktır. Bu olmuyorsa, farklı veri yapıları ya da desenleri düşünmenizin zamanı gelmiş demektir.