Untuk objek yang dapat diindeks, pendekatan saat ini untuk iterasi terbalik rawan kesalahan, tidak alami, dan tidak dapat dibaca secara khusus for i in xrange(n-1, -1, -1): print seqn[i] Satu pendekatan lain saat ini melibatkan membalik daftar sebelum mengulanginya. Teknik itu menghabiskan siklus komputer, memori, dan baris kode rseqn = list(seqn) rseqn.reverse() for value in rseqn: print value_ Extended Slicing adalah pendekatan ketiga yang meminimalkan overhead kode tetapi tidak melakukan apa pun untuk efisiensi, keindahan, atau kejelasan memori Iterasi mundur jauh lebih jarang daripada iterasi maju, tetapi dalam praktiknya hal itu muncul secara teratur. Lihat di bawah Tambahkan fungsi bawaan yang disebut reversed() yang membuat iterator terbalik di atas objek urutan yang mendukung __getitem__() dan __len__() Contoh di atas kemudian disederhanakan menjadi for i in reversed(xrange(n)): print seqn[i] for elem in reversed(seqn): print elem Ide intinya adalah bahwa cara yang paling jelas, paling tidak rawan kesalahan untuk menentukan iterasi terbalik adalah dengan menentukannya dalam arah maju dan kemudian mengatakan terbalik Implementasinya bisa sesederhana def reversed(x): if hasattr(x, 'keys'): raise ValueError("mappings do not support reverse iteration") i = len(x) while i > 0: i -= 1 yield x[i]_ Tidak diperlukan perubahan sintaks bahasa. Proposal sepenuhnya kompatibel ke belakang Implementasi AC dan pengujian unit ada di. https. //bug. python. org/masalah834422 PEP ini telah diterima secara bersyarat untuk Py2. 4. Kondisi tersebut berarti bahwa jika fungsi tersebut ternyata tidak berguna, maka dapat dihapus sebelum Py2. 4b1
Nama terbalik bukan kandidat karena menduplikasi nama daftar. reverse() yang memutasi daftar yang mendasarinya Kasus terhadap adopsi PEP adalah keinginan untuk menjaga agar jumlah fungsi bawaan tetap kecil. Ini perlu ditimbang dengan kesederhanaan dan kenyamanan memilikinya sebagai bawaan alih-alih disimpan di beberapa ruang nama lain Berikut adalah beberapa contoh iterasi terbalik yang diambil dari perpustakaan standar dan komentar tentang mengapa iterasi terbalik diperlukan
Beberapa varian diajukan yang mencoba menerapkan reversed() ke semua iterables dengan menjalankan iterable hingga selesai, menyimpan hasilnya, dan kemudian mengembalikan iterator terbalik pada hasilnya. Sambil memenuhi beberapa pengertian umum penuh, menjalankan input sampai akhir bertentangan dengan tujuan penggunaan iterator sejak awal. Juga, bencana kecil terjadi jika iterator yang mendasarinya tidak terbatas Menempatkan fungsi di modul lain atau melampirkannya ke objek tipe tidak dipertimbangkan. Seperti sepupunya, zip() dan enumerate(), fungsi ini harus dapat diakses langsung dalam pemrograman sehari-hari. Masing-masing memecahkan masalah perulangan dasar. iterasi kunci-langkah, penghitungan loop, dan iterasi terbalik. Membutuhkan beberapa bentuk akses bertitik akan mengganggu kesederhanaan, utilitas harian, dan aksesibilitasnya. Mereka adalah konstruksi perulangan inti, terlepas dari satu domain aplikasi apa pun Apa itu iterasi terbalik?std. reverse_iterator adalah adaptor iterator yang membalikkan arah iterator yang diberikan , yang setidaknya harus berupa model LegacyBidirectionalIteratoror bidirectional_iterator (sejak C++20).
Bagaimana Anda membalikkan daftar dalam iterasi?Gunakan fungsi reversed() untuk mengulangi daftar dalam urutan terbalik , e. g. untuk item dalam urutan terbalik(my_list). . Fungsi reversed() mengambil iterator, seperti daftar, membalikkannya dan mengembalikan hasilnya. |