Liste Üreteçleri Hakkında

Merhaba değerli üstatlar bir şeyi merak ediyorum. Aşağıda iki farklı çıktı var. Birinde “A,R,B” iken, diğerinde sadece bir virgül koymayla bütün ismin tamamını alıyor. Bunun nedeni nedir? Bununla alakalı ayrıntılı bir makale bulabilir miyim?

dosyalar1 = [('Anadizin'), ('Resimler'), ('Baskadosyalar')]
print("Dosyalar1 : ", [dosya[0] for dosya in dosyalar1])

dosyalar2 = [('Anadizin',), ('Resimler',), ('Baskadosyalar',)]
print("Dosyalar2 : ", [dosya[0] for dosya in dosyalar2])

Çıktıları :

Dosyalar1 :  ['A', 'R', 'B']
Dosyalar2 :  ['Anadizin', 'Resimler', 'Baskadosyalar']

Bir başka gerçek örnek ;

import os
uzantılar = ['txt', 'doc', 'xls',
             'jpeg', 'pdf', 'zip',
             'mp3', 'ogg', 'jpeg']
şablon1 = ['{}.{}'.format('dosya', i) for i in uzantılar[:4]]
şablon2 = ['resim{}.{}'.format(i, uzantılar[-1]) for i in range(1, 5)]
şablon3 = ['{}.{}'.format('dosya', i) for i in uzantılar[4:]]
dosyalar = [('anadizin',  şablon1),
            ('resimler', şablon2),
            ('başkadosyalar', şablon3)]
os.makedirs(os.sep.join([dosya[0] for dosya in dosyalar]))
for dizin, şablon in dosyalar:
    for s in şablon:
        open(os.sep.join([dizin, s]), 'w')
    os.chdir(dizin)

Burada her şey ok kafamı karıştıran kısım yine aynı yer. Yani ;

şablon1 = ['{}.{}'.format('dosya', i) for i in uzantılar[:4]]
şablon2 = ['resim{}.{}'.format(i, uzantılar[-1]) for i in range(1, 5)]
şablon3 = ['{}.{}'.format('dosya', i) for i in uzantılar[4:]]
dosyalar = [('anadizin',  şablon1),
            ('resimler', şablon2),
            ('başkadosyalar', şablon3)]
os.makedirs(os.sep.join([dosya[0] for dosya in dosyalar]))

Biri detaylı açıklama konusunda yardımcı olursa çok büyük sevaba girer vallahi

Liste uretecleriyle alakasi yok:

dosyalar1 = [('Anadizin'), ('Resimler'), ('Baskadosyalar')]
dosyalar2 = [('Anadizin',), ('Resimler',), ('Baskadosyalar',)]

print(dosyalar1[0][0]) #A
print(dosyalar2[0][0]) #Anadizin

Liste ureteclerini acip uzerinde gezdigin elemanlarin ne olduklarina bakmak isteyebilirsin. Veya [print(dosya) for dosya in dosyalar1] de olur.

Tsk tsk tsk. Ayip, vallahi ayip.

1 Beğeni

dosyalar2’deki kullanım ile tuple oluşturuyorsunuz. 1 elemanlı tuple
veya listenin 0. indeksinde de o eleman yer alacaktır. Aynı durum sayılar için de geçerli,

>> (2)
2
>> (2,)
(2,)
>> (2,)[0]
2
>> ("hello")
hello
>> ("hello",)
("hello",)
>> ("hello",)[0]
hello
>> type(("hello",))
<class 'tuple'>