folder Tahribat.com Forumları
linefolder Python
linefolder Bazı Pythonic Çözümler



Bazı Pythonic Çözümler

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek

    Şimdiye dek bazı minik işler için sık kullandığım pythonic yollarıdan birkaç örnek paylaşayım dedim, varsa sizin de örnekleriniz faydalı bir konuya dönüştürebiliriz.



    Bir listteki tekrar eden elementleri kaldırmak için:

    l = ["abc","tbt","def","ghi","tbt"]
    m = list(set(l))
    

    Set veri tipi asla duplicate eleman bulundurmaz, list'i set'e dönüştürüp tekrar eden elemanları temizliyoruz sonra tekrar list'e dönüştürüyoruz. Yalnız set veri tipinde sıralama önemli değil, bu yüzden set'e dönüştürdüğünüzde elemanlarınızın sıralaması kayboluyor. Yani sizin için sıralamanın önemli olmadığı durumlarda bu yöntemi kullanmalısınız. ( https://stackoverflow.com/a/7961391/2946122 )

    Peki sıralamayı muhafaza ederek tekrar eden elemanları temizlemek istiyorsanız?

    from collections import OrderedDict
    OrderedDict((x, True) for x in source_list).keys()

    Burada OrderedDict kullanarak list'imizdeki her elemanı sırayla bir dict'e aktarıyoruz ve değer olarak herhangi bir şey girebiliriz, örneğin burada True denmiş. Sonunda da keys() diyerek tekrarlı elemanı olmayan ve sıralı list'imizi elde etmiş oluyoruz. (https://stackoverflow.com/a/7961393/2946122)

     

    Bir string'den tekrar eden boşlukları, tek boşluk haline getirmek için:

    text = "Dalımızı  kıranın   ağacını       kökünden     sökeriz."
    new_text = ' '.join(text.split())

    Yalnız bu yöntemded sadece boşluklar değil \t \n gibi karakterleri temizlediğini de unutmamak gerek. (https://stackoverflow.com/a/2077944/2946122)

    Bir string'den noktalama işaretlerini temizlemek için:

    Python 3

    import string
    line = "Nush ile uslanmayanın hakkı tekdir, tekdir ile uslanmayanın hakkı kötektir."
    translator = str.maketrans('','',string.punctuation) 
    new_line = line.translate(translator)
    
    

    Python 2 (https://stackoverflow.com/a/266162/2946122)

    import string
    line = "Nush ile uslanmayanın hakkı tekdir, tekdir ile uslanmayanın hakkı kötektir."
    new_line = line.translate(None, string.punctuation)

     

    Lightsaber tarafından 30/Tem/17 14:14 tarihinde düzenlenmiştir

    İnsan; insan olsaydı,insan olmazdı..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    Pythonic mi bilmiyorum fakat.
    Örnek:
    re.findall() ile bize dönen veriler liste türünde geri dönmekte ve bunu 2-3 satır for döngüsü ile string şeklinde yazdırmaktayız.

    onun yerine.

    print([i for i in liste]) yaparsak string şeklinde geri döndürebilirsiniz. Eğer burada listede işlem yapmak isterseniz de

    [i * 3 for i in liste if i == 2] şeklinde kullanıma gidebilirsiniz.


    2 farklı listeyi tek bir for döngüsüne sokmak için

    for i,b in zip(liste1,liste2):
        print(i,b)

    yapabilirsiniz.


    Listenin öğelerinin sıra numarası için 

    for i in enumarate(liste):

        print(i)


    yapabilirsiniz.


    Pythonic değilse bile işe yarar.

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    fazladan ram kullanımı dert olmayacak ise set ve list'i aynı anda kullanarak daha hızlı ve sıralı bir liste elde edilir

    python'daki en hızlı liste set'tir, hem ekleme, hem sorgu açısından

    en yavaşı ise tuple'dır sonra dict'tir

    1 milyon satırlı (satır başına 1000 bayt) dosyayı yukarıdaki kod 5 saniyede hallederken

    OrderedDict 8 saniyede hallediyor ve aralarında 200-300 mblık bi ram kullanım farkı oluyor sadece

     

    ram kullanımı dert ise ve milyonlarca veriyi sıralı uniqeleştirmek isterseniz de 

    sqlite3'ün executemany fonksiyonunu bir adet generator fonksiyon ile destekleyerek uçabilirsiniz gene

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mad Scientist
    AMpul
    AMpul's avatar
    Kayıt Tarihi: 31/Aralık/2009
    Erkek

    bu kutsal konuyu uplayim :)

    l = [("havuz", "yavuz"), ("cesme", "secme"), ("pinar", "cinar")]
    s = "Manastir'in ortasinda var bir %s\nCanim %s\nBu yurdun kizlari hepsi de %s\nBiz calar oynariz\n"
    
    for t in l:
    	print s % (t[0], t[0], t[1])

     edit:

    https://www.youtube.com/watch?v=W8xni7BKjqk

     

    AMpul tarafından 03/Kas/17 15:10 tarihinde düzenlenmiştir

    What I cannot create, I do not understand. — Richard Feynman
Toplam Hit: 2329 Toplam Mesaj: 4
python pythonic ways python ipuçları