For range append yapmak için i'yi kullanmak

a3=[]
a4=[]
a5=[]

for i in range(3, 6):
    "a"+str(i).append("merhaba")

hata şu şekilde


      4 
      5 for i in range(3, 6):
----> 6     "a"+str(i).append("merhaba")

AttributeError: 'str' object has no attribute 'append'

hatayı anladım ama bu işlemi nasıl yapacağımı çözemedim?

Ne yapmak istediğinizi anlamadım append listeye eleman eklemek için kullanılır siz string üzerine ekleme yapıyorsunuz
Ne yapmak istediğinizden bahsederseniz daha anlaşılır olur

a3.append(“merhaba”)

bunu yaptığımda a3’ün içine merhaba yazdıracak ya? işte bunu yapmaya çalışıyorum.

Ne yapmak istediğinizi anladım ama düşündüğünüz şekilde çalışmıyor.
Siz kodun büyük ihtimalle şunu yapmasını bekliyorsunuz:

a3.append("merhaba")

a4.append("merhaba")

a5.append("merhaba")

ama python bunu öyle algılamıyor, zaten "a"+str(i) dediğinizde aslında hiçbir şey çalıştıramassınız (eğer shell ekranında değilseniz tabii ve i nin 3 olduğunu var sayalım eğer "a"+str(i) yi çalıştırırsanız ekrana a3 yazacaktır ama string olarak yani yine append kullanamassınız)

append metodu listelerde kullanılır mesela [].append("merhaba") gibi ama siz string de kullanmaya çalışmışsınız yani sizinki şöyle olmuş: "a3".append("merhaba"). Ama string de append diye bir metod olmadığı için kod hata verecek. Yani tek çare şu gibi duruyor:

for i in range(3, 6):
    a3.append("merhaba")
    a4.append("merhaba")
    a5.append("merhaba")

Merhaba, asıl amacınızı bilmemekle birlikte durumunuz SSS’deki "Benzer adlara sahip değişkenler oluşturmak istiyorum"a denk geliyor gibi (veya şuradaki soru). Yani a_i isimli ayrı listeler oluşturmaktansa bunları tek bir çatı (konteyner) altında toplamanız tavsiye olunur. Sizdeki a_i’lerin işlevini tam kestiremedim o yüzden listenin mi sözlüğün mü gideri daha fazla olur bilemiyorum.


Bununla beraber, tavsiye olunmamasına karşın yine de kodunuzu o şekle yakın bir biçimde çalıştırmanın yolu globals() denen, global değişkenleri (daha doğrusu içinde bulunduğu modülün namespace’ini) içerisinde “isim → değeri” diye tutan sözlükten geçiyor:

a3, a4, a5 = [], [], []
for j in range(3, 6):
    # f"a{j}" kısmı "a" + str(j)'ye denktir
    globals()[f"a{j}"].append("merhaba " * j)

print(a5)
# ['merhaba merhaba merhaba merhaba merhaba ']

“değişkenin ismi → değişkenin değeri” sözlüğü olduğu için anahtar olarak değişkenlerinizin isimlerini veriyoruz, bize değerini döndürüyor ki onlar da bir liste olduğu için .append ile işaret ettikleri listelere ekleme yapıyoruz.

print(globals()) diyerek kendisinin ne olduğuna bakabilirsiniz; ayrıntılı bilgi için https://stackoverflow.com/questions/12693606/reason-for-globals-in-python.

3 Beğeni

Hiç aklıma gelmemişti.

Then_Shiffman çok teşekkür ederim. Sizlerin varlığı çok değerli. Emeğinize sağlık.

1 Beğeni