Loop
for
adalah alat aliran kontrol paling dasar di sebagian besar bahasa pemrograman. Misalnya, loop
for
C sederhana terlihat seperti ini:
int i;
for (i=0;i<N;i++)
{
//do something
}
Tidak ada cara yang lebih baik untuk menulis loop
for
C. Dalam kasus yang kompleks, Anda biasanya harus menulis loop bersarang jelek atau mengatur banyak variabel tambahan (seperti
i
pada kode di atas).
Untungnya, semuanya lebih nyaman dengan Python. Ada banyak trik dalam bahasa ini untuk menulis loop yang lebih anggun yang membuat hidup kita lebih mudah. Dalam Python, sangat mungkin untuk menghindari loop bersarang dan variabel tambahan, dan kita bahkan dapat menyesuaikan loop itu sendiri
for
.
Artikel ini akan memandu Anda melalui trik perulangan Python yang paling berguna. Saya harap ini membantu Anda mengalami keindahan bahasa ini.
Dapatkan nilai dan indeks secara bersamaan
Contoh umum penggunaan loop
for
adalah mendapatkan indeks dan nilai dari daftar. Ketika saya mulai belajar Python, saya menulis kode saya seperti ini:
for i in range(len(my_list)):
print(i, my_list[i])
Itu berhasil, tentu saja. Tapi ini bukan solusi gaya Python. Beberapa bulan kemudian, saya mempelajari implementasi standar gaya Python:
for i, v in enumerate(my_list):
print(i, v)
Seperti yang bisa kita lihat, fungsi
enumerate
bawaan membuat hidup kita lebih mudah.
Bagaimana menghindari loop bersarang dengan fungsi Produk
Loop bersarang adalah sakit kepala yang nyata. Mereka dapat mengurangi keterbacaan kode Anda dan membuatnya lebih sulit untuk dipahami. Misalnya, menginterupsi loop bersarang biasanya tidak mudah diterapkan. Kita perlu tahu di mana loop terdalam terputus, loop dalam tertinggi kedua, dan seterusnya.
Untungnya, Python memiliki mengagumkan
product
built-in fungsi
itertools
. Kita dapat menggunakannya untuk menghindari penulisan banyak loop bersarang.
Mari kita lihat betapa bergunanya itu dengan contoh sederhana:
list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]
for a in list_a:
for b in list_b:
for c in list_c:
if a + b + c == 2077:
print(a, b, c)
# 70 2000 7
Seperti yang bisa kita lihat, kita membutuhkan tiga loop bersarang untuk mendapatkan tiga angka dari tiga daftar, yang jumlahnya 2077. Kodenya tidak terlalu bagus.
Sekarang mari kita coba menggunakan fungsi
product
.
from itertools import product
list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]
for a, b, c in product(list_a, list_b, list_c):
if a + b + c == 2077:
print(a, b, c)
# 70 2000 7
Seperti yang kita lihat, berkat penggunaan fungsi
product
, cukup satu siklus saja.
Karena fungsi
product
menghasilkan produk langsung dari data input yang dapat diubah, ini memungkinkan kita untuk menghindari loop bersarang dalam banyak kasus.
Menggunakan Modul Itertools untuk Menulis Loop yang Bagus
Faktanya, sebuah fungsi
product
hanyalah puncak gunung es. Jika Anda mempelajari modul Python bawaan
itertools
, dunia baru terbuka di hadapan Anda. Kotak alat ini berisi banyak metode yang berguna untuk memenuhi kebutuhan perulangan kita. Daftar lengkapnya dapat ditemukan di dokumentasi resmi . Mari kita lihat beberapa contoh.
Cara membuat lingkaran tanpa akhir
Setidaknya ada tiga cara untuk membuat infinite loop:
1. Menggunakan fungsi
count
:
natural_num = itertools.count(1)
for n in natural_num:
print(n)
# 1,2,3,...
2. Fungsi
cycle
:
many_yang = itertools.cycle('Yang')
for y in many_yang:
print(y)
# 'Y','a','n','g','Y','a','n','g',...
3. Melalui fungsi
repeat
:
many_yang = itertools.repeat('Yang')
for y in many_yang:
print(y)
# 'Yang','Yang',...
Menggabungkan beberapa iterator menjadi satu
Fungsi ini
chain()
memungkinkan Anda untuk menggabungkan beberapa iterator menjadi satu.
from itertools import chain
list_a = [1, 22]
list_b = [7, 20]
list_c = [3, 70]
for i in chain(list_a, list_b, list_c):
print(i)
# 1,22,7,20,3,70
Pilih elemen duplikat yang berdekatan
Fungsi ini
groupby
digunakan untuk memilih elemen duplikat yang berdekatan dalam iterator dan menggabungkannya.
from itertools import groupby
for key, group in groupby('YAaANNGGG'):
print(key, list(group))
# Y ['Y']
# A ['A']
# a ['a']
# A ['A']
# N ['N', 'N']
# G ['G', 'G', 'G']
Seperti yang ditunjukkan di atas, simbol-simbol seperti yang berdekatan dihubungkan bersama. Selain itu, kita dapat memberi tahu fungsi
groupby
cara menentukan identitas dua elemen:
from itertools import groupby
for key, group in groupby('YAaANNGGG', lambda x: x.upper()):
print(key, list(group))
# Y ['Y']
# A ['A', 'a', 'A']
# N ['N', 'N']
# G ['G', 'G', 'G']
Menyesuaikan siklus
Setelah meninjau contoh di atas, mari kita pikirkan mengapa loop
for
Python begitu fleksibel dan anggun. Sejauh yang saya mengerti, ini karena fakta bahwa kita dapat menggunakan
for
fungsi dalam loop iterator . Dalam semua contoh di atas, iterator hanya menggunakan fungsi khusus. Semua trik memiliki pola yang sama:
for x in function(iterator)
Modul bawaan itu sendiri
itertools
hanya mengimplementasikan fungsi yang paling umum bagi kami. Jika kita lupa suatu fungsi atau tidak dapat menemukan yang kita butuhkan, kita bisa menulisnya sendiri. Lebih tepatnya, fungsi-fungsi ini adalah generator . Itulah sebabnya kami dapat menghasilkan loop tak terbatas dengan mereka.
Pada dasarnya, kita dapat menyesuaikan loop
for
seperti yang kita lakukan dengan generator kustom.
Mari kita lihat contoh sederhana:
def even_only(num):
for i in num:
if i % 2 == 0:
yield i
my_list = [1, 9, 3, 4, 2, 5]
for n in even_only(my_list):
print(n)
# 4
# 2
Seperti yang Anda lihat dari contoh di atas, kami telah mendefinisikan generator yang disebut
even_only
. Jika kita menggunakan generator ini dalam perulangan for, iterasi hanya akan terjadi untuk bilangan genap dari daftar.
Tentu saja, contoh ini hanya untuk penjelasan. Ada cara lain untuk melakukan hal yang sama, seperti menggunakan Tampilan Daftar .
my_list = [1, 9, 3, 4, 2, 5]
for n in (i for i in my_list if not i % 2):
print(n)
# 4
# 2
Keluaran
Tugas membuat loop dengan Python dapat diselesaikan dengan sangat fleksibel dan anggun. Untuk menulis loop yang mudah dan sederhana, kita dapat menggunakan alat bawaan atau bahkan menentukan generator sendiri.
Periklanan
Server andal untuk disewa , buat konfigurasi Anda sendiri dalam beberapa klik dan mulai bekerja dalam satu menit. Semuanya akan bekerja dengan lancar dan dengan waktu kerja yang sangat tinggi!
Bergabunglah dengan obrolan Telegram kami .