Cara memanggil dari daftar dengan python

Python terkenal karena memungkinkan Anda menulis kode yang elegan, mudah ditulis, dan hampir semudah membaca bahasa Inggris biasa. Salah satu fitur bahasa yang paling khas adalah pemahaman daftar, yang dapat Anda gunakan untuk membuat fungsionalitas yang kuat dalam satu baris kode. Namun, banyak pengembang berjuang untuk sepenuhnya memanfaatkan fitur yang lebih canggih dari pemahaman daftar di Python. Beberapa pemrogram bahkan menggunakannya terlalu banyak, yang dapat menyebabkan kode menjadi kurang efisien dan sulit dibaca

Di akhir tutorial ini, Anda akan memahami kekuatan penuh pemahaman daftar Python dan cara menggunakan fiturnya dengan nyaman. Anda juga akan mendapatkan pemahaman tentang trade-off yang menyertai penggunaannya sehingga Anda dapat menentukan kapan pendekatan lain lebih disukai

Dalam tutorial ini, Anda akan mempelajari caranya

  • Tulis ulang loop dan panggilan
    >>> squares = [i * i for i in range(10)]
    >>> squares
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    _3 sebagai pemahaman daftar dengan Python
  • Pilih antara pemahaman, loop, dan
    >>> squares = [i * i for i in range(10)]
    >>> squares
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    3 panggilan
  • Tingkatkan pemahaman Anda dengan logika kondisional
  • Gunakan pemahaman untuk mengganti
    >>> squares = [i * i for i in range(10)]
    >>> squares
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    5
  • Buat profil kode Anda untuk menjawab pertanyaan kinerja

Download Gratis. Dapatkan contoh bab dari Trik Python. Buku yang menunjukkan kepada Anda praktik terbaik Python dengan contoh sederhana yang dapat Anda terapkan secara instan untuk menulis kode + Pythonic yang lebih indah

Cara Membuat Daftar dengan Python

Ada beberapa cara berbeda untuk membuat daftar dengan Python. Untuk lebih memahami trade-off menggunakan pemahaman daftar di Python, pertama-tama mari kita lihat cara membuat daftar dengan pendekatan ini

Hilangkan iklan

Menggunakan >>> squares = [i * i for i in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] _6 Loops

Jenis loop yang paling umum adalah

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6 loop. Anda dapat menggunakan
>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6 loop untuk membuat daftar elemen dalam tiga langkah

  1. Instansiasi daftar kosong
  2. Mengulangi iterable atau berbagai elemen
  3. Tambahkan setiap elemen ke akhir daftar

Jika Anda ingin membuat daftar yang berisi sepuluh kuadrat sempurna pertama, Anda dapat menyelesaikan langkah-langkah ini dalam tiga baris kode

>>>

>>> squares = []
>>> for i in range(10):
..     squares.append(i * i)
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
_

Di sini, Anda memberi contoh daftar kosong,

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
9. Kemudian, Anda menggunakan
>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
_6 loop untuk mengulangi
new_list = [expression for member in iterable]
1. Terakhir, Anda mengalikan setiap angka dengan angka itu sendiri dan menambahkan hasilnya di akhir daftar

Menggunakan >>> squares = [i * i for i in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] _3 Objek

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3 memberikan pendekatan alternatif yang didasarkan pada pemrograman fungsional. Anda meneruskan fungsi dan iterable, dan
>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3 akan membuat objek. Objek ini berisi keluaran yang akan Anda dapatkan dari menjalankan setiap elemen iterable melalui fungsi yang disediakan

Sebagai contoh, pertimbangkan situasi di mana Anda perlu menghitung harga setelah pajak untuk daftar transaksi

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
_

Di sini, Anda memiliki iterable

new_list = [expression for member in iterable]
_5 dan fungsi
new_list = [expression for member in iterable]
6. Anda meneruskan kedua argumen ini ke
>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
_3, dan menyimpan objek yang dihasilkan di
new_list = [expression for member in iterable]
8. Anda dapat dengan mudah mengonversi objek peta ini menjadi daftar menggunakan
new_list = [expression for member in iterable]
9

Menggunakan Pemahaman Daftar

Pemahaman daftar adalah cara ketiga untuk membuat daftar. Dengan pendekatan elegan ini, Anda dapat menulis ulang

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6 loop dari contoh pertama hanya dalam satu baris kode

>>> ________0______

Daripada membuat daftar kosong dan menambahkan setiap elemen ke akhir, Anda cukup menentukan daftar dan isinya pada saat yang sama dengan mengikuti format ini

>>>

new_list = [expression for member in iterable]
_

Setiap pemahaman daftar dalam Python mencakup tiga elemen

  1. >>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
    >>> TAX_RATE = .08
    >>> def get_price_with_tax(txn):
    ..     return txn * (1 + TAX_RATE)
    >>> final_prices = [get_price_with_tax(i) for i in txns]
    >>> final_prices
    [1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
    
    1 adalah anggota itu sendiri, panggilan ke metode, atau ekspresi valid lainnya yang mengembalikan nilai. Dalam contoh di atas, ekspresi
    >>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
    >>> TAX_RATE = .08
    >>> def get_price_with_tax(txn):
    ..     return txn * (1 + TAX_RATE)
    >>> final_prices = [get_price_with_tax(i) for i in txns]
    >>> final_prices
    [1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
    
    2 adalah kuadrat dari nilai anggota
  2. >>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
    >>> TAX_RATE = .08
    >>> def get_price_with_tax(txn):
    ..     return txn * (1 + TAX_RATE)
    >>> final_prices = [get_price_with_tax(i) for i in txns]
    >>> final_prices
    [1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
    
    _3 adalah objek atau nilai dalam daftar atau iterable. Pada contoh di atas, nilai anggotanya adalah
    >>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
    >>> TAX_RATE = .08
    >>> def get_price_with_tax(txn):
    ..     return txn * (1 + TAX_RATE)
    >>> final_prices = [get_price_with_tax(i) for i in txns]
    >>> final_prices
    [1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
    
    4
  3. >>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
    >>> TAX_RATE = .08
    >>> def get_price_with_tax(txn):
    ..     return txn * (1 + TAX_RATE)
    >>> final_prices = [get_price_with_tax(i) for i in txns]
    >>> final_prices
    [1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
    
    5 adalah daftar, set, urutan, generator, atau objek lain yang dapat mengembalikan elemennya satu per satu. Pada contoh di atas, iterable adalah
    new_list = [expression for member in iterable]
    
    1

Karena persyaratan ekspresi sangat fleksibel, pemahaman daftar di Python bekerja dengan baik di banyak tempat di mana Anda akan menggunakan

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3. Anda dapat menulis ulang contoh penetapan harga dengan pemahaman daftarnya sendiri

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = [get_price_with_tax(i) for i in txns]
>>> final_prices
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
_

Satu-satunya perbedaan antara implementasi ini dan

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3 adalah bahwa pemahaman daftar di Python mengembalikan daftar, bukan objek peta

Hilangkan iklan

Manfaat Menggunakan Pemahaman Daftar

Daftar pemahaman sering digambarkan sebagai lebih Pythonic dari loop atau

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3. Namun daripada menerima begitu saja penilaian itu, ada baiknya untuk memahami manfaat menggunakan pemahaman daftar dengan Python jika dibandingkan dengan alternatifnya. Nanti, Anda akan belajar tentang beberapa skenario di mana alternatifnya adalah pilihan yang lebih baik

Salah satu manfaat utama menggunakan pemahaman daftar di Python adalah bahwa ini adalah alat tunggal yang dapat Anda gunakan dalam banyak situasi berbeda. Selain pembuatan daftar standar, pemahaman daftar juga dapat digunakan untuk pemetaan dan pemfilteran. Anda tidak harus menggunakan pendekatan yang berbeda untuk setiap skenario

Ini adalah alasan utama mengapa pemahaman daftar dianggap Pythonic, karena Python mencakup alat sederhana dan kuat yang dapat Anda gunakan dalam berbagai macam situasi. Sebagai manfaat tambahan, setiap kali Anda menggunakan pemahaman daftar dengan Python, Anda tidak perlu mengingat urutan argumen yang tepat seperti saat Anda memanggil

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3

Pemahaman daftar juga lebih bersifat deklaratif daripada loop, yang artinya lebih mudah dibaca dan dipahami. Loops mengharuskan Anda untuk fokus pada bagaimana daftar dibuat. Anda harus membuat daftar kosong secara manual, mengulang elemen, dan menambahkan masing-masing ke akhir daftar. Dengan pemahaman daftar di Python, Anda bisa fokus pada apa yang ingin Anda masuki dalam daftar dan percaya bahwa Python akan mengurus bagaimana konstruksi daftar berlangsung

Cara Meningkatkan Pemahaman Anda

Untuk memahami nilai penuh yang dapat diberikan oleh pemahaman daftar, akan sangat membantu untuk memahami berbagai kemungkinan fungsionalitasnya. Anda juga ingin memahami perubahan yang terjadi pada pemahaman daftar di Python 3. 8

Menggunakan Logika Bersyarat

Sebelumnya, Anda melihat rumus ini untuk cara membuat pemahaman daftar

>>>

new_list = [expression for member in iterable]
_

Meskipun rumus ini akurat, namun juga agak tidak lengkap. Deskripsi yang lebih lengkap dari rumus pemahaman menambahkan dukungan untuk persyaratan opsional. Cara paling umum untuk menambahkan logika bersyarat ke pemahaman daftar adalah dengan menambahkan kondisional di akhir ekspresi

>>>

new_list = [expression for member in iterable (if conditional)]
_

Di sini, pernyataan bersyarat Anda muncul tepat sebelum tanda kurung tutup

Persyaratan penting karena memungkinkan pemahaman daftar untuk memfilter nilai yang tidak diinginkan, yang biasanya memerlukan panggilan ke

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
5

>>>

>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
_

Di blok kode ini, pernyataan bersyarat memfilter karakter apa pun di

new_list = [expression for member in iterable]
2 yang bukan vokal

Kondisional dapat menguji ekspresi apa pun yang valid. Jika Anda memerlukan filter yang lebih kompleks, Anda bahkan dapat memindahkan logika kondisional ke fungsi terpisah

>>>

>>> sentence = 'The rocket, who was named Ted, came back \
.. from Mars because he missed his friends.'
>>> def is_consonant(letter):
..     vowels = 'aeiou'
..     return letter.isalpha() and letter.lower() not in vowels
>>> consonants = [i for i in sentence if is_consonant(i)]
['T', 'h', 'r', 'c', 'k', 't', 'w', 'h', 'w', 's', 'n', 'm', 'd', \
'T', 'd', 'c', 'm', 'b', 'c', 'k', 'f', 'r', 'm', 'M', 'r', 's', 'b', \
'c', 's', 'h', 'm', 's', 's', 'd', 'h', 's', 'f', 'r', 'n', 'd', 's']
_

Di sini, Anda membuat filter kompleks

new_list = [expression for member in iterable]
_3 dan meneruskan fungsi ini sebagai pernyataan bersyarat untuk pemahaman daftar Anda. Perhatikan bahwa nilai anggota
>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = [get_price_with_tax(i) for i in txns]
>>> final_prices
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
_4 juga diteruskan sebagai argumen ke fungsi Anda

Anda dapat menempatkan persyaratan di akhir pernyataan untuk pemfilteran sederhana, tetapi bagaimana jika Anda ingin mengubah nilai anggota alih-alih memfilternya?

>>>

new_list = [expression (if conditional) for member in iterable]
_

Dengan rumus ini, Anda dapat menggunakan logika bersyarat untuk memilih dari beberapa kemungkinan opsi keluaran. Misalnya, jika Anda memiliki daftar harga, Anda mungkin ingin mengganti harga negatif dengan

new_list = [expression for member in iterable]
5 dan membiarkan nilai positif tidak berubah

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
0

Di sini, ekspresi Anda

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = [get_price_with_tax(i) for i in txns]
>>> final_prices
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
_4 berisi pernyataan bersyarat,
new_list = [expression for member in iterable]
7. Ini memberitahu Python untuk menampilkan nilai
>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = [get_price_with_tax(i) for i in txns]
>>> final_prices
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
4 jika angkanya positif, tetapi untuk mengubah
>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = [get_price_with_tax(i) for i in txns]
>>> final_prices
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
4 menjadi
new_list = [expression for member in iterable]
5 jika angkanya negatif. Jika ini tampak berlebihan, maka mungkin berguna untuk melihat logika kondisional sebagai fungsinya sendiri

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
1

Sekarang, pernyataan bersyarat Anda terkandung dalam

new_list = [expression for member in iterable (if conditional)]
1, dan Anda dapat menggunakannya sebagai bagian dari ekspresi pemahaman daftar Anda

Hilangkan iklan

Menggunakan Pemahaman Set dan Kamus

Sementara pemahaman daftar di Python adalah alat yang umum, Anda juga bisa membuat pemahaman set dan kamus. Pemahaman set hampir persis sama dengan pemahaman daftar di Python. Perbedaannya adalah set pemahaman memastikan output tidak mengandung duplikat. Anda dapat membuat pemahaman set dengan menggunakan kurung kurawal, bukan tanda kurung

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
2

Pemahaman set Anda menampilkan semua vokal unik yang ditemukan di

new_list = [expression for member in iterable (if conditional)]
2. Tidak seperti daftar, kumpulan tidak menjamin bahwa item akan disimpan dalam urutan tertentu. Inilah sebabnya mengapa anggota pertama dari himpunan adalah
new_list = [expression for member in iterable (if conditional)]
3, meskipun vokal pertama di
new_list = [expression for member in iterable (if conditional)]
2 adalah
>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = [get_price_with_tax(i) for i in txns]
>>> final_prices
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
4

Pemahaman kamus serupa, dengan persyaratan tambahan untuk menentukan kunci

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
3

Untuk membuat kamus

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
9, Anda menggunakan kurung kurawal (
new_list = [expression for member in iterable (if conditional)]
7) serta pasangan kunci-nilai (
new_list = [expression for member in iterable (if conditional)]
8) dalam ekspresi Anda

Menggunakan Operator Walrus

Piton 3. 8 akan memperkenalkan ekspresi penugasan, juga dikenal sebagai operator walrus. Untuk memahami bagaimana Anda dapat menggunakannya, pertimbangkan contoh berikut

Katakanlah Anda perlu membuat sepuluh permintaan ke API yang akan mengembalikan data suhu. Anda hanya ingin mengembalikan hasil yang lebih besar dari 100 derajat Fahrenheit. Asumsikan bahwa setiap permintaan akan mengembalikan data yang berbeda. Dalam hal ini, tidak ada cara untuk menggunakan pemahaman daftar di Python untuk menyelesaikan masalah. Rumus

new_list = [expression for member in iterable (if conditional)]
_9 tidak memberikan cara bagi kondisional untuk menetapkan data ke variabel yang dapat diakses oleh ekspresi

Operator walrus memecahkan masalah ini. Ini memungkinkan Anda menjalankan ekspresi sekaligus menetapkan nilai output ke variabel. Contoh berikut menunjukkan bagaimana ini mungkin, menggunakan

>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
0 untuk menghasilkan data cuaca palsu

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
4

Anda tidak perlu sering menggunakan ekspresi penugasan di dalam pemahaman daftar dengan Python, tetapi ini adalah alat yang berguna untuk Anda miliki saat diperlukan

Kapan Tidak Menggunakan Pemahaman Daftar dengan Python

Pemahaman daftar berguna dan dapat membantu Anda menulis kode elegan yang mudah dibaca dan di-debug, tetapi itu bukan pilihan yang tepat untuk semua keadaan. Mereka mungkin membuat kode Anda berjalan lebih lambat atau menggunakan lebih banyak memori. Jika kode Anda kurang berkinerja atau lebih sulit dipahami, mungkin lebih baik memilih alternatif

Perhatikan Pemahaman Bersarang

Pemahaman dapat disarangkan untuk membuat kombinasi daftar, kamus, dan set dalam koleksi. Misalnya, laboratorium iklim melacak suhu tinggi di lima kota berbeda untuk minggu pertama bulan Juni. Struktur data yang sempurna untuk menyimpan data ini bisa berupa pemahaman daftar Python yang bersarang di dalam pemahaman kamus

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
5

Anda membuat koleksi luar

>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
1 dengan pemahaman kamus. Ekspresinya adalah pasangan kunci-nilai, yang berisi pemahaman lain. Kode ini akan dengan cepat menghasilkan daftar data untuk setiap kota di
>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
2

Daftar bersarang adalah cara umum untuk membuat matriks, yang sering digunakan untuk tujuan matematika. Lihatlah blok kode di bawah ini

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
6

Pemahaman daftar luar

>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
_3 membuat enam baris, sedangkan pemahaman daftar dalam
>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
4 mengisi setiap baris ini dengan nilai

Sejauh ini, tujuan dari setiap pemahaman bersarang cukup intuitif. Namun, ada situasi lain, seperti perataan daftar bersarang, di mana logikanya membuat kode Anda lebih membingungkan. Ambil contoh ini, yang menggunakan pemahaman daftar bersarang untuk meratakan matriks

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
7

Kode untuk meratakan matriks ringkas, tetapi mungkin tidak begitu intuitif untuk memahami cara kerjanya. Di sisi lain, jika Anda menggunakan

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6 loop untuk meratakan matriks yang sama, maka kode Anda akan jauh lebih mudah

>>> ________13______8

Sekarang Anda dapat melihat bahwa kode melintasi satu baris matriks pada satu waktu, menarik keluar semua elemen di baris tersebut sebelum berpindah ke baris berikutnya.

Meskipun pemahaman daftar bersarang satu baris mungkin tampak lebih Pythonic, yang paling penting adalah menulis kode yang mudah dipahami dan dimodifikasi oleh tim Anda. Ketika Anda memilih pendekatan Anda, Anda harus membuat penilaian berdasarkan apakah menurut Anda pemahaman membantu atau merugikan keterbacaan

Hilangkan iklan

Pilih Generator untuk Kumpulan Data Besar

Pemahaman daftar di Python bekerja dengan memuat seluruh daftar keluaran ke dalam memori. Untuk daftar berukuran kecil atau bahkan sedang, ini biasanya baik-baik saja. Jika Anda ingin menjumlahkan kuadrat dari seribu bilangan bulat pertama, pemahaman daftar akan menyelesaikan masalah ini dengan mengagumkan

>>>

>>> txns = [1.09, 23.56, 57.84, 4.56, 6.78]
>>> TAX_RATE = .08
>>> def get_price_with_tax(txn):
..     return txn * (1 + TAX_RATE)
>>> final_prices = map(get_price_with_tax, txns)
>>> list(final_prices)
[1.1772000000000002, 25.4448, 62.467200000000005, 4.9248, 7.322400000000001]
9

Tetapi bagaimana jika Anda ingin menjumlahkan kuadrat dari satu miliar bilangan bulat pertama? . Itu karena Python mencoba membuat daftar dengan satu miliar bilangan bulat, yang menghabiskan lebih banyak memori daripada yang diinginkan komputer Anda. Komputer Anda mungkin tidak memiliki sumber daya yang diperlukan untuk menghasilkan daftar yang sangat besar dan menyimpannya di memori. Jika Anda tetap mencoba melakukannya, maka mesin Anda dapat melambat atau bahkan macet

Ketika ukuran daftar menjadi bermasalah, seringkali berguna untuk menggunakan generator daripada pemahaman daftar dengan Python. Generator tidak membuat struktur data tunggal yang besar di memori, melainkan mengembalikan iterable. Kode Anda dapat meminta nilai berikutnya dari iterable sebanyak yang diperlukan atau sampai Anda mencapai akhir urutan Anda, sementara hanya menyimpan satu nilai pada satu waktu

Jika Anda menjumlahkan miliar kuadrat pertama dengan generator, maka program Anda mungkin akan berjalan untuk sementara waktu, tetapi tidak akan menyebabkan komputer Anda macet. Contoh di bawah ini menggunakan generator

>>>

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
0

Anda dapat mengetahui bahwa ini adalah generator karena ekspresi tidak diapit oleh tanda kurung atau kurung kurawal. Opsional, generator dapat dikelilingi oleh tanda kurung

Contoh di atas masih membutuhkan banyak pekerjaan, tetapi melakukan operasi dengan malas. Karena evaluasi yang lambat, nilai hanya dihitung saat diminta secara eksplisit. Setelah generator menghasilkan nilai (misalnya,

>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
6), generator dapat menambahkan nilai tersebut ke jumlah yang berjalan, lalu membuang nilai tersebut dan menghasilkan nilai berikutnya (
>>> sentence = 'the rocket came back from mars'
>>> vowels = [i for i in sentence if i in 'aeiou']
>>> vowels
['e', 'o', 'e', 'a', 'e', 'a', 'o', 'a']
7). Saat fungsi penjumlahan meminta nilai berikutnya, siklus akan dimulai kembali. Proses ini membuat jejak memori tetap kecil

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3 juga beroperasi dengan malas, artinya memori tidak akan menjadi masalah jika Anda memilih untuk menggunakannya dalam kasus ini

>>>

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1

Terserah Anda apakah Anda lebih suka ekspresi generator atau

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3

Profil untuk Mengoptimalkan Performa

Jadi, pendekatan mana yang lebih cepat? . Jika tidak, biasanya yang terbaik adalah memilih pendekatan apa pun yang mengarah ke kode terbersih

Jika Anda berada dalam skenario di mana kinerja itu penting, biasanya yang terbaik adalah membuat profil pendekatan yang berbeda dan mendengarkan datanya.

>>> sentence = 'The rocket, who was named Ted, came back \
.. from Mars because he missed his friends.'
>>> def is_consonant(letter):
..     vowels = 'aeiou'
..     return letter.isalpha() and letter.lower() not in vowels
>>> consonants = [i for i in sentence if is_consonant(i)]
['T', 'h', 'r', 'c', 'k', 't', 'w', 'h', 'w', 's', 'n', 'm', 'd', \
'T', 'd', 'c', 'm', 'b', 'c', 'k', 'f', 'r', 'm', 'M', 'r', 's', 'b', \
'c', 's', 'h', 'm', 's', 's', 'd', 'h', 's', 'f', 'r', 'n', 'd', 's']
0 adalah perpustakaan yang berguna untuk mengatur waktu berapa lama waktu yang dibutuhkan untuk menjalankan potongan kode. Anda dapat menggunakan
>>> sentence = 'The rocket, who was named Ted, came back \
.. from Mars because he missed his friends.'
>>> def is_consonant(letter):
..     vowels = 'aeiou'
..     return letter.isalpha() and letter.lower() not in vowels
>>> consonants = [i for i in sentence if is_consonant(i)]
['T', 'h', 'r', 'c', 'k', 't', 'w', 'h', 'w', 's', 'n', 'm', 'd', \
'T', 'd', 'c', 'm', 'b', 'c', 'k', 'f', 'r', 'm', 'M', 'r', 's', 'b', \
'c', 's', 'h', 'm', 's', 's', 'd', 'h', 's', 'f', 'r', 'n', 'd', 's']
0 untuk membandingkan runtime
>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3,
>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6 loop, dan daftar pemahaman

>>>

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2

Di sini, Anda menentukan tiga metode yang masing-masing menggunakan pendekatan berbeda untuk membuat daftar. Kemudian, Anda memberi tahu

>>> sentence = 'The rocket, who was named Ted, came back \
.. from Mars because he missed his friends.'
>>> def is_consonant(letter):
..     vowels = 'aeiou'
..     return letter.isalpha() and letter.lower() not in vowels
>>> consonants = [i for i in sentence if is_consonant(i)]
['T', 'h', 'r', 'c', 'k', 't', 'w', 'h', 'w', 's', 'n', 'm', 'd', \
'T', 'd', 'c', 'm', 'b', 'c', 'k', 'f', 'r', 'm', 'M', 'r', 's', 'b', \
'c', 's', 'h', 'm', 's', 's', 'd', 'h', 's', 'f', 'r', 'n', 'd', 's']
_0 untuk menjalankan masing-masing fungsi tersebut masing-masing 100 kali.
>>> sentence = 'The rocket, who was named Ted, came back \
.. from Mars because he missed his friends.'
>>> def is_consonant(letter):
..     vowels = 'aeiou'
..     return letter.isalpha() and letter.lower() not in vowels
>>> consonants = [i for i in sentence if is_consonant(i)]
['T', 'h', 'r', 'c', 'k', 't', 'w', 'h', 'w', 's', 'n', 'm', 'd', \
'T', 'd', 'c', 'm', 'b', 'c', 'k', 'f', 'r', 'm', 'M', 'r', 's', 'b', \
'c', 's', 'h', 'm', 's', 's', 'd', 'h', 's', 'f', 'r', 'n', 'd', 's']
0 mengembalikan total waktu yang diperlukan untuk menjalankan 100 eksekusi tersebut

Seperti yang ditunjukkan oleh kode, perbedaan terbesar adalah antara pendekatan berbasis loop dan

>>> squares = [i * i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3, dengan loop membutuhkan waktu 50% lebih lama untuk dieksekusi. Apakah ini penting atau tidak tergantung pada kebutuhan aplikasi Anda

Kesimpulan

Dalam tutorial ini, Anda belajar cara menggunakan pemahaman daftar di Python untuk menyelesaikan tugas kompleks tanpa membuat kode Anda terlalu rumit

Sekarang kamu bisa

  • Menyederhanakan loop dan
    >>> squares = [i * i for i in range(10)]
    >>> squares
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    _3 panggilan dengan pemahaman daftar deklaratif
  • Tingkatkan pemahaman Anda dengan logika kondisional
  • Buat pemahaman set dan kamus
  • Tentukan kapan kejelasan kode atau kinerja menentukan pendekatan alternatif

Setiap kali Anda harus memilih metode pembuatan daftar, cobalah beberapa penerapan dan pertimbangkan apa yang paling mudah dibaca dan dipahami dalam skenario spesifik Anda. Jika kinerja itu penting, maka Anda dapat menggunakan alat pembuatan profil untuk memberi Anda data yang dapat ditindaklanjuti alih-alih mengandalkan firasat atau tebakan tentang mana yang paling berhasil.

Ingatlah bahwa sementara pemahaman daftar Python mendapat banyak perhatian, intuisi dan kemampuan Anda untuk menggunakan data saat dibutuhkan akan membantu Anda menulis kode bersih yang melayani tugas yang ada. Ini, pada akhirnya, adalah kunci untuk membuat kode Pythonic Anda

Tandai sebagai Selesai

Tonton Sekarang Tutorial ini memiliki kursus video terkait yang dibuat oleh tim Real Python. Tonton bersama dengan tutorial tertulis untuk memperdalam pemahaman Anda. Memahami Pemahaman Daftar Python

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Cara memanggil dari daftar dengan python

Kirimi Saya Trik Python »

Tentang James Timmins

Cara memanggil dari daftar dengan python
Cara memanggil dari daftar dengan python

James adalah konsultan perangkat lunak dan pengembang Python. Ketika dia tidak sedang menulis Python, dia biasanya menulis tentang itu dalam bentuk blog atau buku

» Lebih lanjut tentang Yakobus


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Cara memanggil dari daftar dengan python

Aldren

Cara memanggil dari daftar dengan python

Geir Arne

Cara memanggil dari daftar dengan python

Jaya

Cara memanggil dari daftar dengan python

Joanna

Cara memanggil dari daftar dengan python

Mike

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurut anda?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami

Bisakah saya memanggil fungsi dari daftar dengan Python?

Jawaban. Ya, variabel di for dari daftar pemahaman dapat digunakan sebagai parameter untuk suatu fungsi .

Bagaimana Anda mengakses data dari daftar dengan Python?

Daftar literal ditulis dalam tanda kurung siku [ ]. Daftar berfungsi mirip dengan string -- gunakan fungsi len() dan tanda kurung siku [ ] untuk mengakses data, dengan elemen pertama pada indeks 0 . (Lihat python resmi. dokumen daftar org. )

Bagaimana Anda mengambil nilai dari daftar dengan Python?

Metode #3. Menggunakan enumerate() Ini adalah metode yang paling elegan untuk melakukan masalah khusus ini dan sangat disarankan untuk digunakan jika kita perlu mendapatkan indeks bersama . Metode ini menghitung indeks beserta nilainya.

Bagaimana Anda memanggil fungsi di dalam daftar dengan Python?

Jawaban. Anda dapat menggunakan ekspresi apa pun di dalam pemahaman daftar, termasuk fungsi dan metode . Ekspresi dapat berupa bilangan bulat 42 , perhitungan numerik 2+2 (=4) , atau bahkan pemanggilan fungsi np. sum(x) pada setiap iterable x. Fungsi apa pun tanpa nilai pengembalian, mengembalikan Tidak ada per default.