Birkaç Python "küçük numara" | Kod dahil

Kaynak | NewBeeNLP (ID: gh_627b00c8dbd0)

Sorumlu Editör | Yu Yan

Önüne yaz

Bugün Python Yemek Kitabını birlikte inceleyelim.Kitabın tamamı soru cevap çiftleri şeklinde geliştirildi.Bu uzun zaman önce okuduğum bir not. Yemek kitabı bir giriş kitabı değil, daha çok bir referans kitabı gibidir.Bir vakıf olduğu için tek tek okumaya gerek yoktur.Öneri, kullanılması gereken bilgi noktaları ve becerilerin üzerinden geçmektir. Ardından, eksiklikleri kontrol edip boşlukları dolduralım!

Veri Yapıları ve Algoritmalar

Rasgele uzunluktaki yinelenebilir bir nesneden öğeleri ayrıştırın

* ifade N öğe içeren bir veri yapısı türünü gerekli parçalara ayırmak için kullanılabilir.

1birinci, * orta, son = notlar

Örneğin, notlar 100 not verisini kaydeder ve biz sadece ilk ve son iki notu önemsiyoruz, ortadaki tüm notları aşağıdaki gibi bir listeye kaydedebiliriz:

Son N öğeyi kaydedin
  • collection.deque (maxlen = N) sabit uzunlukta bir kuyruk oluşturur ve yeni bir kayıt eklendiğinde ve kuyruk dolduğunda, en eski kayıt otomatik olarak kaldırılır.
  • Kuyruğun boyutunu belirtmezseniz, sınırsız bir kuyruk elde edersiniz;
  • deque, sıranın her iki ucundan öğe eklemeyi veya çıkarmayı destekler
1 koleksiyondan içe aktarma deque2q = deque () 3q.append (1) 4q.append (2) 5q.append (3) 6q.appendleft (4) 7q.pop () 8q.popleft () En büyük veya en küçük N elemanı bulun
  • Heapq modülünde iki işlev vardır: nlargest () ve nsmallest ()
1import heapq23nums = 4print (heapq.nlargest (3, nums)) 5out: 6print (heapq.nsmallest (3, nums)) 7out:
  • Bu iki işlev aynı zamanda bir parametre anahtarını da kabul edebilir
1In: portföy = 910cheap = heapq.nsmallest (3, portföy, anahtar = lambda s: s) 11cheap12out: 13 Sözlüğü sırayla tutun
  • Koleksiyon modülünün OrderedDict, öğelerin başlangıçta eklendiği sırayla çalışacaktır;
  • Elemanların eklendiği sıraya göre anahtar konumları düzenleyen dahili olarak çift bağlantılı bir liste tutar. Bu nedenle, OrderedDict'in boyutu normal bir sözlüğün iki katından fazladır.
Sözlük hesaplama sorunu
  • Sözlüğün anahtarlarını ve değerlerini ters çevirmek için zip () kullanın
Dizide en sık kullanılan öğeyi bulun
  • Koleksiyon modülünün sayaç sınıfı
  • Ve Counter sınıfı, ilk birkaç örneği doğrudan almak için çok uygun bir most_common (n) yöntemine sahiptir.
1 koleksiyonlardan içe aktar Counter2words = 3word_counts = Sayaç (kelimeler) 4top_3 = word_counts.most_common (3) Sözlük listesini ortak anahtara göre sıralayın
  • Operatör modülünün itermgetter işlevi
1 işlecinden itemgetter içe aktarım 23In: rows = 910itemgetter ('fname') 11Out: < operator.itemgetter, 0x7f01606657d0 > 1213rows_by_frame = sıralı (satırlar, anahtar = öğe hedefleyici ('isim')) 14Çıkan: 15
  • Itermgetter () işlevi birden çok anahtarı da kabul edebilir
1rows_by_frame = sıralı (satırlar, anahtar = öğe hedefleyici ('isim', 'lname'))

Sayı, tarih ve saat

Değeri yuvarlayın
  • Yerleşik round (değer, ndigits) işlevini kullanın
1 > > > yuvarlak (1.23, 1) 21.23 > > > yuvarlak (1.27, 1) 41.35 > > > yuvarlak (162773, -1) 6162770
  • Bir değer iki tam sayının tam olarak yarısı olduğunda, yuvarlama işlemi değere en yakın çift sayıya gider. 1.5 ve 2.5 gibi 2'ye yuvarlanacak
  • Round () içindeki ndigitler negatif bir sayı olabilir, bu durumda buna göre onlarca ve yüzlere yuvarlanır. . .
Değeri biçimlendirin
  • Yerleşik format () işlevini kullanın
1 > > > x = 123.4562 > > > biçim (x, '0.2f') 3123.46 İkili, sekizli ve onaltılı dönüşüm
  • Bir tamsayıyı ikiliye dönüştürmek için bin () kullanın
  • Bir tamsayıyı sekizlik tabana dönüştürmek için oct () kullanın
  • Bir tamsayıyı onaltılıya dönüştürmek için hex () kullanın
rastgele seçim
  • random.choice (), diziden rastgele öğeler seçebilir
1 > > > random2 içe aktar > > > değerler = 3 > > > random.choice (değerler) 445 > > > random.choice (değerler) 62
  • random.shuffle (), dizideki öğelerin sırasını karıştırabilir
1 > > > random.shuffle (değerler) 2 > > > values3random.sample (), N öğeyi örnekleyebilir random.sample (), N öğeyi örnekleyebilir 1 > > > random.sample (değerler, 2) 2 Zaman dönüşümü
  • Datatime modülü, farklı zaman birimleri arasındaki dönüşümü tamamlamak için kullanılabilir. Örneğin, bir zaman aralığını temsil etmek için bir timedelta örneği oluşturabilirsiniz.
1date-time içe aktarma zamanından 23In: a = timedelta (gün = 2, saat = 6) 4In: b = timedelta (saat = 4.5) 5In: c = a + b 6In: c. Gün 7Out: 28In: c.saniye 9Out : 3780010In: c.seconds / 360011Out: 10.512In: c.total_seconds () / 360013Çıkış: 58.5

Yineleyiciler ve oluşturucular

Yineleyicideki öğelere manuel olarak erişin 1with open ('/ etc / passwd') olarak f: 2 deneyin: 3 while True: 4 satır = sonraki (f) 5 baskı (satır, bitiş = '') 6 StopIteration hariç: 7 geçiş Yetki verilen yineleme
  • Bir liste, tuple veya diğer yinelenebilir nesneyi içinde barındıran özel bir kap nesnesi için, yeni kapsayıcımızın yinelemeli işlemi tamamlamasını istiyoruz. Genel olarak konuşursak, tek yapmamız gereken, nesnenin içinde tutulan kaba yineleme isteğini delege etmek için bir __iter __ () yöntemi tanımlamaktır.
1 sınıf Düğüm: 2 def __init __ (self, değer): 3 Self._value = vaule4 self._children = 5 def __repr __ (self): 6 return'Node ((! R)) '. Format (self._value) 7 def __iter__ (öz): 8 dönüş iter (self._children)

Bu örnekte, iter () yöntemi yineleme isteğini nesnede tutulan _children özniteliğine iletir.

Yeni yineleme modları oluşturmak için oluşturucular kullanın
  • Fonksiyonda verim ifadesi göründüğü sürece, bir üreteç haline getirilecektir.
1def frange (başlatma, durdurma, artırma): 2 x = başlangıç3 iken x < stop: 4 verim x5 x + = artış
  • Üreticinin yalnızca yinelemeli işlemlere yanıt olarak çalıştığını unutmayın.
Yineleyiciyi dilimleyin
  • itertool.islice () yineleyicileri ve oluşturucuları dilimleyebilir
1In: def count (n): 2 ...: while True: 3 ...: verim n 4 ...: n + = 15 ...: 6In: c = count (0) 7In: c 8Out: < 0x7f92899b3c80'de oluşturucu nesne sayısı > 9 --- > 1 c10TypeError: 'generator' nesnesinin özniteliği yok '__ getitem __' 1112import itertools13In: x in itertools.islice (c, 10, 20) için: 14 ...: print (x) 1510161117121813191420152116221723182419 Tekrarlanabilirin önceki bölümünü atla
  • İtertools.drop while () işlevi dizideki ilk birkaç öğeyi atacaktır.Örneğin, bir dosyayı okumamız gerekir. Dosyanın başlangıcındaki bir dizi yorum satırı istediğimiz şey değildir.
1 itertools içe aktarılırken2 açık ('/ etc / passwd') ile birlikte açılan satır için f: 3 (lambda line: line, startwith ('#'), f): 4 print (line, end = '') Tüm olası kombinasyonları yineleyin
  • Bir dizi öğenin olası tüm kombinasyonlarını yinelemek istiyoruz
  • İtrtools.permutations () işlevi, bir dizi öğeyi kabul eder, tüm öğeleri olası tüm durumlarda yeniden düzenler ve bir demet olarak döndürür.
1In: itertools'dan içe aktarma permütasyonları 2In: öğeler = 3In: permütasyonlarda p için (öğeler): 4 ...: print (p) 5 ...: 6 ('a', 'b', 'c') 7 ( 'a', 'c', 'b') 8 ('b', 'a', 'c') 9 ('b', 'c', 'a') 10 ('c', 'a', 'b') 11 ('c', 'b', 'a') # Tüm daha kısa permütasyonları almak istiyorsanız, In uzunluğunu belirtebilirsiniz: permütasyonlarda p için (öğeler, 2): ...: print (p ) ('a', 'b') ('a', 'c') ('b', 'a') ('b', 'c') ('c', 'a') ('c' , 'b')
  • itertools.combinations, öğeler arasındaki gerçek sıralamayı dikkate almaz, yani ('a', 'b') ve ('b', 'a') aynı kombinasyon olarak kabul edilir.
  • Bu kısıtlamayı kaldırmak istiyorsanız, combations_with_replacement'ı kullanabilirsiniz.
Birden fazla diziyi aynı anda yineleyin
  • Zip () işlevi, öğeleri birden çok dizide yinelemek için kullanılabilir
1 > > > xvalues = 2 > > > yvalues = 3 > > > x, y için zip (xvalues, yvalues): 4 ... print (x, y) 5 ... 6110175788437921510106211799 Farklı kaplarda yineleyin
  • Aynı işlemi birçok nesne üzerinde gerçekleştirmemiz gerekir, ancak bu nesneler farklı kaplarda bulunur ve iç içe döngü işlemeyi yazmaktan kaçınmayı ve kodu okunabilir tutmayı umuyoruz. İtertools.chain () yöntemi, bu görevi basitleştirmek için kullanılabilir.
1 itertools içe aktarma zincirinden 23In: a = 4In: b = 5In: x zincirinde (a, b): 6 ...: print (x) 7 ...: 819210311412x13y14z Birden çok sıralı diziyi birleştirin, sonra sağa Tüm sıralı sırayı yineleyin
  • heapq.merge () işlevi
1 > > > içe aktarım yığını 2 > > > a = 3 > > > b = 4 > > > heapq.merge (a, b) için c için: 5 ... baskı (c) 6 ... 71829410511612713101411

Dosya ve GÇ

Çıktıyı bir dosyaya yönlendirme
  • File anahtar kelime parametresini print () işlevine eklemeniz yeterlidir
1f: 2 olarak open ('somefile.txt', 'rt') ile yazdırma ('Merhaba Dünya!', Dosya = f) farklı sınırlayıcılarla veya satır sonu karakterleriyle yazdırmayı tamamlar 1 > > > baskı ('GKY', 1995,5,18, eylül = '-', bitiş = '!! \ n') GKY-1995-5-18 !! Dizeler üzerinde GÇ işlemleri gerçekleştirin
  • Dize verilerini işleyebilen dosya benzeri nesneler oluşturmak için io.StringIO () ve io.ByteIO () kullanın.
Sıkıştırılmış veri dosyalarını okuyun ve yazın
  • Gzip ve bz2 modülleri uygulanabilir
1gzip 2'yi açık ('somefile.gz', 'rt') ile f: 3 text = f.read () 45import bz26f: 7 text = f olarak açık ('somefile.bz2', 'rt') ile içe aktarın. read () 89 gzip10'u open ('somefile.gz', 'wt') olarak f: 11 f.write (text) 1213 import bz214with open ('somefile.bz', 'wt') f: 15 f.write ( Metin) İkili verileri değişken arabelleğe okuyun
  • İkili verileri, arada herhangi bir kopya bağlantısı olmadan doğrudan değişken bir arabelleğe okumak istiyoruz. Örneğin, verileri yerinde değiştirmek ve daha sonra tekrar dosyaya yazmak istiyoruz.
1import os.path 2def read_into_buffer (dosya adı): 3 buf = bytearray (os.path.getsize (filename)) 4 f: 5 f.readinto (buf) olarak open (dosya adı, 'rb') ile 6 return buf 78 açıkken ('sample.bin', 'wb') as f: 9 f.write (b'hello world ') 1011buf = read_into_buffer (' sample.bin ') 12In: buf13Out: bytearray (b'hello world') Python nesnelerini seri hale getirin
  • Python nesnesini bir dosyaya kaydedilebilmesi, bir veritabanında saklanabilmesi veya bir ağ bağlantısı yoluyla iletilebilmesi için bir bayt akışına serileştirmemiz gerekir.
  • Verileri serileştirmenin en yaygın yolu, pikle modülünü kullanmaktır.
1import pickle2data = ... #some python object3f = open ('somefile', 'wb') 4pickle.dump (data, f)
  • Nesneyi bir dize olarak dökmek için şunu kullanabilirsiniz:
1import pickle2data = ... #some python object3f = open ('somefile', 'wb') 4pickle.dumps (data, f)
  • Nesneyi bayt akışından yeniden oluşturmak istiyorsanız, pickle.load () veya pickle.loads () kullanabilirsiniz.

Veri kodlama ve işleme

JSON verilerini okuyun ve yazın
  • Esas olarak JSON modülünü kullanın
  • İki ana işlev json.dumps () ve json.loads () 'dir.
  • Bir dize yerine bir dosyaysa, json.dump () ve json.load () kullanın
Basit XML belgelerini ayrıştırın
  • xml.etree.ElementTree, basit XML belgelerinden veri çıkarabilir
1 urllib.request import urlopen 2from xml.etree.ElementTree içe aktarma ayrıştırması 34u = urlopen (' 5doc = parse (u) 6In: doc.iterfind içindeki öğe için ( 'channel / item'): 7 ....: title = item.findtext ('title') 8 ....: date = item.findtext ('pubDate') 9 ....: link = item.findtext ('bağlantı') 10 ....: baskı (başlık) 11 ....: baskı (tarih) 12 ....: baskı (bağlantı) 13 ....: baskı () 14 ....:
Eve Hoşgeldin! Üç "röle", Wucheng işe dönüş özel treni bugün kalkıyor
önceki
Wucheng Bölgesinde dört lider grubu, salgının önlenmesi ve kontrolünün ve ekonomik ve sosyal kalkınmanın zaferini elde etmeye çabalayarak "üç hizmeti" gerçekleştirmek için cephenin derinliklerine ind
Sonraki
Java'nın istikrarlı büyümesi ve Kotlin'in yükselişiyle, 2020'deki başlıca programlama dillerinin gelişme eğilimleri
Heterojen hesaplamanın yükselişi, GPU hızlandırmalı bilgi işlem sunucusu FP5468G2 ortaya çıktı
20 Şubat'ta Youku'da düzenlenen "Gizemli Gezegen" Dünya Prömiyeri, yaşamın evriminin mucizevi yolculuğuna tanıklık ediyor
Audi ve Ericsson, otomotiv üretimine girmek için 5G teknolojisi üzerinde işbirliği yapıyor
Sanayi ve Bilgi Teknolojileri Bakanlığı: SMS, 1,6 milyar kullanıcı için seyahat kanıtı sağlayabilir; OPPO, çekirdek oluşturma planına yanıt verir; Windows Terminal 0.9 yayınlandı | Geek Başlıkları
Klasik ilahiler yayılmış "Along Chuanhe" ateşi söylüyor Tang şiir klasiği "Youth Line" Cool Wo Music Variety Chart'ta üçüncü oldu
Toyota Highlander'dan başlayarak, sahibi gerçeği itiraf etti: Araba iyi bir araba ve yol tutuşu gerçekten de bir eksiklik.
@Developer, bu GitHub projesi yün için kullanılabilir
Sahip: Tamamen yüklendiğinde herkes rahattır ve üçüncü sıra yolcuların rahatsızlığı yoktur
Canlı yayın bile McJia Yangqing, anladığı dört büyük yapay zeka iniş sorunundan bahsediyor | "Salgın" teknoloji açık sınıfına saldırmak
"Mükemmel İlişki" Du Jinhan, şövalye ruhunu gösterir, en güçlü asistanı yaratmak için tuzlu ve tatlı olabilir
Yerleştirme talebi "üç hizmet"
To Top