Öncelikle, örneğin quickly.for C++ tarzı yineleyicinızı gözden geçirin:Daha anlamlı python yineleyicileri nasıl yapılır? Sadece C++ yineleyici gibi
//--- Iterating over vector with iterator.
vector<int> v;
. . .
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
cout << *it << endl;
}
O esnektir. Altta yatan konteyner tiplerini değiştirmek kolaydır. Örneğin, ekleme ve silme işlemlerinin sayısının o kadar yüksek olduğuna karar verebilirdiniz ki bir liste bir vektörden daha verimli olacaktır. Ayrıca birçok kullanışlı üye işlevine de sahiptir. Vektör kullanım yineleyicileri için üye işlevlerinin birçoğu, örneğin, ata, ekle veya sil. Ayrıca, yineleyici (destekleniyorsa) bidirectionaly'yi (++, - gibi) kullanabiliriz. Bu, nesneler gibi bir akışı ayrıştırmak için kullanışlıdır.
Python'un sorunları: 1: Şu anda, döngü sözdizimi için python, C++ 'dan daha az esnektir. (iyi, daha güvenli) 2: "it! = iter.end()" stili yerine, python bir sonraki() öğesinde olmadığı zaman istisna atar. Esnek değil.
Soru 1: Fikrim yukarıda doğru mu?
Tamam. İşte benim soru, daha güçlü bir python yineleyici C++ yineleyiciler kadar güçlü nasıl uygulamak için geliyor? Şu anda, döngü sözdizimi için python, C++ 'dan daha az esnektir. Ayrıca http://www.velocityreviews.com/forums/t684406-pushback-iterator.html gibi bazı olası çözümler buluyorum. ancak kullanıcıdan iteratör sormak yerine bir şeyi push_back yapmasını ister.
Soru 2: Python'da Çift Yönlü Bir Yineleyiciyi uygulamak en iyisidir? Tıpkı http://www.cplusplus.com/reference/std/iterator/BidirectionalIterator/ gibi.
it = v.begin();
while(it!=v.end()) {
//do sth here
if (condition1)
++it;//suppose this iterator supports ++
if(condition2)
--it;//suppose this iterator supports --
}
temel özellikleri şunlardır: 1) iki yönlü, 2) daha basit "son" kontrol sözde kodu aşağıdaki gibidir. "++" veya "-" operatörleri veya ortak işlevler önemli değildir (yine de anlamsal bir fark yoktur). Ben cevaplar bazı olası çözümleri var :
Güncelleme
sayesinde (n)
i = 0
while i < len(sequence): # or i < len and some_other_condition
star_it = sequence[i]
if condition_one(star_it):
i += 1
if condition_two(star_it):
i = max(i - 1, 0)
Ancak dizinin aksine, listenin rastgele erişim olmalıdır Ç. Python'daki "liste" nesnesinin dahili olarak, bağlantılı liste benzeri şeyler kullanılarak gerçekleştirildiğini varsayalım. Böylece, bu süre döngü çözüm verimli değildir. Ancak, C++ 'da, "rastgele yineleyici", "çift yönlü yineleyici" var. Nasıl daha iyi bir çözüm bulmalıyım? Teşekkürler.
"Python" da yapamayacağınız bir şeyin somut bir örneğini "C++" ile kolayca yapabiliyor musunuz? –
Python'un verim + istisnası mekanizması inanılmaz derecede esnektir (fonksiyonel programlamada "süreklilik" olarak adlandırdığımız şeydir). Onları düzgün kullanmayı öğrenin ve ödüllendirileceksiniz. Bileşik yineleyicileri Python'da C++ 'dan tanımlamak çok daha kolaydır. –
Bu soru çok belirsiz ve mevcut formdaki soruya gerçek bir cevap yok. –