Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

Ketika diperlukan untuk menemukan kejadian pertama dari satu daftar di daftar lain, atribut 'set' dan metode 'berikutnya' digunakan

Contoh

Di bawah ini adalah demonstrasi yang sama

my_list_1 = [23, 64, 34, 77, 89, 9, 21]
my_list_2 = [64, 10, 18, 11, 0, 21]
print("The first list is :")
print(my_list_1)
print("The second list is :")
print(my_list_2)

my_list_2 = set(my_list_2)

my_result = next((ele for ele in my_list_1 if ele in my_list_2), None)

print("The result is :")
print(my_result)

Keluaran

The first list is :
[23, 64, 34, 77, 89, 9, 21]
The second list is :
[64, 10, 18, 11, 0, 21]
The result is :
64
_

Penjelasan

  • Dua daftar ditentukan, dan ditampilkan di konsol

  • Daftar kedua diubah menjadi satu set

  • Dengan cara ini, semua elemen unik dipertahankan

  • Elemen duplikat akan dihilangkan

  • Metode 'selanjutnya' digunakan untuk mengulang ke nilai berikutnya dengan mengulang melalui daftar pertama dan kedua

    Pada titik tertentu dalam perjalanan Python Anda, Anda mungkin perlu menemukan item pertama yang cocok dengan kriteria tertentu dalam Python , seperti daftar atau kamus

    Kasus paling sederhana adalah Anda perlu mengonfirmasi bahwa item tertentu ada di iterable. Misalnya, Anda ingin mencari nama dalam daftar nama atau substring di dalam string. Dalam kasus ini, sebaiknya gunakan operator

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    5. Namun, ada banyak kasus penggunaan saat Anda mungkin ingin mencari item dengan properti tertentu. Misalnya, Anda mungkin perlu

    • Temukan nilai bukan nol dalam daftar angka
    • Temukan nama dengan panjang tertentu dalam daftar string
    • Temukan dan modifikasi kamus dalam daftar kamus berdasarkan atribut tertentu

    Tutorial ini akan membahas cara terbaik untuk mendekati ketiga skenario tersebut. Salah satu opsi adalah mengubah seluruh iterable Anda menjadi daftar baru dan kemudian menggunakan

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    6 untuk menemukan item pertama yang cocok dengan kriteria Anda

    >>>

    >>> names = ["Linda", "Tiffany", "Florina", "Jovann"]
    >>> length_of_names = [len(name) for name in names]
    >>> idx = length_of_names.index(7)
    >>> names[idx]
    'Tiffany'
    
    _

    Di sini, Anda telah menggunakan

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    _6 untuk menemukan bahwa
    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    8 adalah nama depan dalam daftar Anda dengan tujuh karakter. Solusi ini tidak bagus, sebagian karena Anda menghitung kriteria untuk semua elemen, meskipun item pertama cocok

    Dalam situasi di atas, Anda mencari properti terhitung dari item yang Anda iterasi. Dalam tutorial ini, Anda akan mempelajari cara mencocokkan atribut turunan tersebut tanpa perlu melakukan perhitungan yang tidak perlu

    Kode sampel. Klik di sini untuk mengunduh kode sumber gratis yang akan Anda gunakan untuk menemukan kecocokan pertama dalam daftar Python atau iterable

    Cara Mendapatkan Item Pencocokan Pertama di Daftar Python

    Anda mungkin sudah tahu tentang operator Python

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    _5, yang dapat memberi tahu Anda jika suatu item dalam iterable. Meskipun ini adalah metode paling efisien yang dapat Anda gunakan untuk tujuan ini, terkadang Anda mungkin perlu mencocokkan berdasarkan properti terhitung dari item, seperti panjangnya

    Misalnya, Anda mungkin bekerja dengan daftar kamus, tipikal yang mungkin Anda dapatkan saat memproses data JSON. Lihat data ini yang diperoleh dari

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    0

    >>>

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    _

    Anda mungkin ingin mengambil kamus pertama yang memiliki populasi lebih dari seratus juta. Operator

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    _5 bukanlah pilihan yang bagus karena dua alasan. Satu, Anda harus memiliki kamus lengkap untuk mencocokkannya, dan dua, itu tidak akan mengembalikan objek yang sebenarnya tetapi nilai Boolean

    >>>

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    _

    Tidak ada cara untuk menggunakan

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    _5 jika Anda perlu menemukan kamus berdasarkan atribut kamus, seperti populasi

    Cara yang paling mudah dibaca untuk menemukan dan memanipulasi elemen pertama dalam daftar berdasarkan nilai yang dihitung adalah dengan menggunakan

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop sederhana

    >>>

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    _

    Alih-alih mencetak objek target, Anda dapat melakukan apapun yang Anda suka dengannya di

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop body. Setelah Anda selesai, pastikan untuk menghentikan
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop sehingga Anda tidak perlu mencari sisa daftar

    Catatan. Menggunakan pernyataan

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    _6 berlaku jika Anda mencari kecocokan pertama dari iterable. Jika Anda ingin mendapatkan atau memproses semua kecocokan, maka Anda dapat melakukannya tanpa
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    6

    Pendekatan loop

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 adalah yang diambil oleh paket
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    9, yang merupakan paket kecil yang dapat Anda unduh dari PyPI yang menampilkan fungsi tujuan umum,
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    0. Fungsi ini mengembalikan nilai kebenaran pertama dari iterable secara default, dengan parameter
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1 opsional untuk mengembalikan nilai kebenaran nilai pertama setelah melewati argumen
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1

    Catatan. Di Python 3. 10 dan yang lebih baru, Anda dapat menggunakan untuk mencocokkan jenis struktur data ini dengan cara yang Anda inginkan. Misalnya, Anda bisa mencari negara pertama dengan populasi lebih dari seratus juta sebagai berikut

    >>>

    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    _

    Di sini, Anda menggunakan penjaga hanya untuk mencocokkan populasi tertentu

    Menggunakan pencocokan pola struktural alih-alih pernyataan kondisional biasa bisa lebih mudah dibaca dan ringkas jika pola pencocokannya cukup kompleks

    Nanti di tutorial, Anda akan mengimplementasikan variasi Anda sendiri dari fungsi

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    0. Tapi pertama-tama, Anda akan mencari cara lain untuk mengembalikan pertandingan pertama. menggunakan generator

    Hilangkan iklan

    Menggunakan Generator Python untuk Mendapatkan Kecocokan Pertama

    Iterator generator Python adalah iterable hemat memori yang dapat digunakan untuk menemukan elemen pertama dalam daftar atau iterable apa pun. Mereka adalah fitur inti dari Python, digunakan secara ekstensif di bawah tenda. Kemungkinan Anda sudah menggunakan generator tanpa menyadarinya

    Masalah potensial dengan generator adalah bahwa mereka sedikit lebih abstrak dan, dengan demikian, tidak dapat dibaca seperti

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop. Anda memang mendapatkan beberapa manfaat kinerja dari generator, tetapi manfaat ini sering diabaikan ketika pentingnya keterbacaan dipertimbangkan. Meskipun demikian, menggunakannya bisa menyenangkan dan benar-benar meningkatkan level game Python Anda

    Di Python, Anda dapat membuat generator dengan berbagai cara, tetapi dalam tutorial ini Anda akan bekerja dengannya

    >>>

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    _

    Setelah Anda menentukan iterator generator, Anda kemudian dapat memanggil fungsi

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    5 dengan generator, menghasilkan negara satu per satu hingga daftar
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    6 habis

    Untuk menemukan elemen pertama yang cocok dengan kriteria tertentu dalam daftar, Anda dapat menambahkan ekspresi bersyarat ke pemahaman generator sehingga iterator yang dihasilkan hanya akan menghasilkan item yang sesuai dengan kriteria Anda. Dalam contoh berikut, Anda menggunakan ekspresi bersyarat untuk menghasilkan item berdasarkan apakah atribut

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    7 mereka lebih dari seratus juta

    >>> ________31______

    Jadi sekarang generator hanya akan menghasilkan kamus dengan atribut

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    7 lebih dari seratus juta. Ini berarti bahwa pertama kali Anda memanggil
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    _5 dengan iterator generator, itu akan menghasilkan elemen pertama yang Anda cari dalam daftar, seperti versi loop
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3

    Catatan. Anda akan mendapatkan pengecualian jika Anda memanggil

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    5 dan tidak ada kecocokan atau generator habis. Untuk mencegah hal ini, Anda dapat menyampaikan argumen ________24______2 ke
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    5

    >>>

    >>> next(gen, None)
    {'country': 'United States', 'population': 326687501}
    >>> next(gen, None)
    
    _

    Setelah generator selesai memproduksi kecocokan, itu akan mengembalikan nilai default yang diteruskan. Karena Anda mengembalikan

    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    _4, Anda tidak mendapatkan output pada REPL. Jika Anda tidak memberikan nilai default, Anda akan mendapatkan pengecualian
    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    5

    Dalam hal keterbacaan, generator tidak sealami loop

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3. Jadi mengapa Anda ingin menggunakan satu untuk tujuan ini?

    Membandingkan Performa Antara Loop dan Generator

    Seperti biasa saat mengukur performa, Anda tidak boleh membaca terlalu banyak hasil dari satu rangkaian. Alih-alih, rancang pengujian untuk kode Anda sendiri dengan data dunia nyata Anda sendiri sebelum membuat keputusan penting. Anda juga perlu mempertimbangkan kerumitan terhadap keterbacaan—mungkin memangkas beberapa milidetik saja tidak sepadan

    Untuk pengujian ini, Anda ingin membuat sebuah fungsi yang dapat membuat daftar dengan ukuran arbitrer dengan nilai tertentu pada posisi tertentu

    >>>

    >>> from pprint import pp
    
    >>> def build_list(size, fill, value, at_position):
    ..     return [value if i == at_position else fill for i in range(size)]
    ...
    
    >>> pp(
    ..     build_list(
    ..         size=10,
    ..         fill={"country": "Nowhere", "population": 10},
    ..         value={"country": "Atlantis", "population": 100},
    ..         at_position=5,
    ..     )
    .. )
    [{'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Atlantis', 'population': 100},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10}]
    
    _

    Fungsi

    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    _7 membuat daftar berisi item yang identik. Semua item dalam daftar, kecuali satu, adalah salinan dari
    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    8 argumen. Outlier tunggal adalah argumen
    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    9, dan ditempatkan pada indeks yang disediakan oleh argumen
    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    0

    Anda mengimpor

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    _1 dan menggunakannya untuk menampilkan daftar yang dibuat agar lebih mudah dibaca. Jika tidak, daftar akan muncul dalam satu baris secara default

    Dengan fungsi ini, Anda dapat membuat sekumpulan besar daftar dengan nilai target di berbagai posisi dalam daftar. Anda dapat menggunakan ini untuk membandingkan waktu yang diperlukan untuk menemukan elemen di awal dan di akhir daftar

    Untuk membandingkan

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop dan generator, Anda memerlukan dua fungsi dasar lainnya yang di-hard-code untuk menemukan kamus dengan atribut
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    7 lebih dari lima puluh

    def find_match_loop(iterable):
        for value in iterable:
            if value["population"] > 50:
                return value
        return None
    
    def find_match_gen(iterable):
        return next(
          (value for value in iterable if value["population"] > 50),
          None
        )
    

    Fungsinya dikodekan keras untuk menjaga hal-hal sederhana untuk pengujian. Di bagian selanjutnya, Anda akan membuat fungsi yang dapat digunakan kembali

    Dengan komponen dasar ini, Anda dapat menyiapkan skrip untuk menguji kedua fungsi yang cocok dengan serangkaian daftar dengan posisi target dan lokasi berbeda dalam daftar

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    0

    Skrip ini akan menghasilkan dua daftar paralel, masing-masing berisi waktu yang dibutuhkan untuk menemukan elemen dengan loop atau generator. Skrip juga akan menghasilkan daftar ketiga yang berisi posisi yang sesuai dari elemen target dalam daftar

    Anda belum melakukan apa pun dengan hasilnya, dan idealnya Anda ingin memetakannya. Jadi, periksa skrip lengkap berikut yang menggunakan

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    5 untuk menghasilkan beberapa bagan dari output

    Membuat Bagan Kecocokan PertamaTampilkan/Sembunyikan

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    1

    Bergantung pada sistem yang Anda jalankan dan nilai untuk

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    6,
    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    7, dan
    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    8 yang Anda gunakan, menjalankan skrip dapat memakan waktu cukup lama, tetapi harus menghasilkan satu bagan yang menunjukkan waktu yang diplot terhadap satu sama lain

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Selain itu, setelah menutup bagan pertama, Anda akan mendapatkan bagan lain yang menunjukkan rasio antara kedua strategi tersebut

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Bagan terakhir ini dengan jelas menggambarkan bahwa dalam pengujian ini, ketika item target berada di dekat awal iterator, generator jauh lebih lambat daripada

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop. Namun, setelah elemen untuk menemukan berada di posisi 100 atau lebih, generator mengalahkan
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop cukup konsisten dan dengan margin yang adil

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Anda dapat memperbesar bagan sebelumnya secara interaktif dengan ikon kaca pembesar. Bagan yang diperbesar menunjukkan bahwa ada peningkatan kinerja sekitar lima atau enam persen. Lima persen mungkin bukan apa-apa untuk dituliskan di rumah, tetapi itu juga tidak dapat diabaikan. Apakah itu layak untuk Anda tergantung pada data spesifik yang akan Anda gunakan, dan seberapa sering Anda perlu menggunakannya

    Catatan. Untuk nilai

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    6 yang rendah, Anda akan sering mendapatkan lonjakan pada bagan, yang merupakan efek samping yang tak terhindarkan dari pengujian di komputer yang tidak didedikasikan untuk pengujian

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Jika komputer perlu melakukan sesuatu, maka itu akan menjeda proses Python tanpa ragu-ragu, dan ini dapat meningkatkan hasil tertentu. Jika Anda mengulangi pengujian beberapa kali, paku akan muncul di lokasi acak

    Untuk menghaluskan garis, tingkatkan nilai

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    6

    Dengan hasil tersebut, Anda dapat secara tentatif mengatakan bahwa generator lebih cepat daripada

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop, meskipun generator bisa jauh lebih lambat ketika item yang ditemukan berada di seratus elemen pertama dari iterable. Saat Anda berurusan dengan daftar kecil, perbedaan keseluruhan dalam hal milidetik mentah yang hilang tidak banyak. Namun untuk iterable besar di mana keuntungan 5 persen bisa berarti beberapa menit, itu adalah sesuatu yang perlu diingat

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Seperti yang bisa Anda lihat dari grafik terakhir ini, untuk iterable yang sangat besar, peningkatan performa stabil di sekitar 6 persen. Juga, abaikan lonjakan—untuk menguji iterable besar ini,

    >>> gen = (country for country in countries)
    >>> next(gen)
    {'country': 'Austria', 'population': 8840521}
    
    >>> next(gen)
    {'country': 'Canada', 'population': 37057765}
    
    6 berkurang secara substansial

    Hilangkan iklan

    Membuat Fungsi Python yang Dapat Digunakan Kembali untuk Menemukan Kecocokan Pertama

    Katakan bahwa iterables yang Anda harapkan akan digunakan akan berada di sisi besar, dan Anda tertarik untuk memeras setiap kinerja dari kode Anda. Oleh karena itu, Anda akan menggunakan generator alih-alih

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    3 loop. Anda juga akan berurusan dengan berbagai iterable yang berbeda dengan berbagai item dan menginginkan fleksibilitas dalam cara Anda mencocokkan, jadi Anda akan merancang fungsi Anda untuk dapat mencapai berbagai sasaran

    • Mengembalikan nilai kebenaran pertama
    • Mengembalikan pertandingan pertama
    • Mengembalikan hasil kebenaran pertama dari nilai yang diteruskan melalui fungsi kunci
    • Mengembalikan kecocokan pertama dari nilai yang diteruskan melalui fungsi kunci
    • Mengembalikan nilai default jika tidak ada kecocokan

    Meskipun ada banyak cara untuk mengimplementasikannya, inilah cara untuk melakukannya

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    2

    Anda dapat memanggil fungsi hingga empat argumen, dan itu akan berperilaku berbeda tergantung pada kombinasi argumen yang Anda teruskan ke dalamnya

    Perilaku fungsi terutama bergantung pada

    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    9 dan
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1 argumen. Itu sebabnya pernyataan
    >>> gen = (
    ..     country for country in countries
    ..     if country["population"] > 100_000_000
    .. )
    >>> next(gen)
    {'country': 'Philippines', 'population': 106651922}
    
    _8 memeriksa apakah
    >>> gen = (
    ..     country for country in countries
    ..     if country["population"] > 100_000_000
    .. )
    >>> next(gen)
    {'country': 'Philippines', 'population': 106651922}
    
    9 dan menggunakan fungsi
    >>> next(gen, None)
    {'country': 'United States', 'population': 326687501}
    >>> next(gen, None)
    
    0 untuk mengetahui apakah
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1 adalah fungsi

    Misalnya, jika kedua kondisi

    >>> gen = (
    ..     country for country in countries
    ..     if country["population"] > 100_000_000
    .. )
    >>> next(gen)
    {'country': 'Philippines', 'population': 106651922}
    
    _8 adalah
    >>> next(gen, None)
    {'country': 'United States', 'population': 326687501}
    >>> next(gen, None)
    
    3, maka itu berarti Anda telah melewati
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1 tetapi tidak
    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    9. Ini berarti bahwa Anda ingin setiap item dalam iterable dilewatkan melalui fungsi
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1, dan nilai pengembalian harus menjadi hasil kebenaran pertama

    Sebagai contoh lain, jika kedua kondisi

    >>> gen = (
    ..     country for country in countries
    ..     if country["population"] > 100_000_000
    .. )
    >>> next(gen)
    {'country': 'Philippines', 'population': 106651922}
    
    _8 adalah
    >>> next(gen, None)
    {'country': 'United States', 'population': 326687501}
    >>> next(gen, None)
    
    8, itu berarti Anda telah memberikan nilai tetapi bukan
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1. Melewati
    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    9 dan tidak
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1 berarti Anda menginginkan elemen pertama dalam iterable yang cocok langsung dengan nilai yang diberikan

    Setelah

    >>> gen = (
    ..     country for country in countries
    ..     if country["population"] > 100_000_000
    .. )
    >>> next(gen)
    {'country': 'Philippines', 'population': 106651922}
    
    _8 selesai, Anda memiliki generator. Yang tersisa untuk dilakukan adalah memanggil
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    5 dengan generator dan argumen
    >>> for country in countries:
    ..     match country:
    ..         case {"population": population} if population > 100_000_000:
    ..             print(country)
    ..             break
    ...
    {'country': 'Philippines', 'population': 106651922}
    
    2 untuk pertandingan pertama

    Dengan fungsi ini, Anda dapat mencari kecocokan dengan empat cara berbeda

    >>>

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    3

    Dengan fungsi ini, Anda memiliki banyak fleksibilitas dalam cara mencocokkan. Misalnya, Anda hanya dapat menangani nilai, atau hanya

    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1 fungsi, atau keduanya

    Dalam paket

    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    _9 yang disebutkan sebelumnya, tanda tangan fungsi sedikit berbeda. Itu tidak memiliki parameter nilai. Anda masih dapat mencapai efek yang sama seperti di atas dengan mengandalkan parameter
    >>> for country in countries:
    ..     if country["population"] > 100_000_000:
    ..         print(country)
    ..         break
    ...
    {"country": "Philippines", "population": 106651922}
    
    1

    >>>

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    4

    Dalam materi yang dapat diunduh, Anda juga dapat menemukan penerapan alternatif

    >>> from pprint import pp
    
    >>> def build_list(size, fill, value, at_position):
    ..     return [value if i == at_position else fill for i in range(size)]
    ...
    
    >>> pp(
    ..     build_list(
    ..         size=10,
    ..         fill={"country": "Nowhere", "population": 10},
    ..         value={"country": "Atlantis", "population": 100},
    ..         at_position=5,
    ..     )
    .. )
    [{'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Atlantis', 'population': 100},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10},
     {'country': 'Nowhere', 'population': 10}]
    
    8 yang mencerminkan tanda tangan paket
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    9

    Kode sampel. Klik di sini untuk mengunduh kode sumber gratis yang akan Anda gunakan untuk menemukan kecocokan pertama dalam daftar Python atau iterable

    Terlepas dari implementasi mana yang akhirnya Anda gunakan, Anda sekarang memiliki fungsi yang dapat digunakan kembali dan dapat digunakan kembali yang bisa mendapatkan item pertama yang Anda butuhkan

    Kesimpulan

    Dalam tutorial ini, Anda telah mempelajari cara menemukan elemen pertama dalam daftar atau yang dapat diubah dalam berbagai cara. Anda mengetahui bahwa cara tercepat dan paling dasar untuk mencocokkan adalah dengan menggunakan operator

    >>> countries = [
    ..     {"country": "Austria", "population": 8_840_521},
    ..     {"country": "Canada", "population": 37_057_765},
    ..     {"country": "Cuba", "population": 11_338_138},
    ..     {"country": "Dominican Republic", "population": 10_627_165},
    ..     {"country": "Germany", "population": 82_905_782},
    ..     {"country": "Norway", "population": 5_311_916},
    ..     {"country": "Philippines", "population": 106_651_922},
    ..     {"country": "Poland", "population": 37_974_750},
    ..     {"country": "Scotland", "population": 5_424_800},
    ..     {"country": "United States", "population": 326_687_501},
    .. ]
    
    5, tetapi Anda telah melihat bahwa ini terbatas untuk hal yang lebih kompleks. Jadi, Anda telah memeriksa loop
    >>> target_country = {"country": "Philippines", "population": 106_651_922}
    >>> target_country in countries
    True
    
    _3 yang sederhana, yang akan menjadi cara yang paling mudah dibaca dan langsung. Namun, Anda juga telah melihat generator untuk kinerja dan kesombongan ekstra itu

    Terakhir, Anda telah melihat satu kemungkinan penerapan fungsi yang mendapatkan item pertama dari iterable, apakah itu nilai kebenaran pertama atau nilai yang diubah oleh fungsi yang cocok dengan kriteria tertentu

    Tandai sebagai Selesai

    🐍 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

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Kirimi Saya Trik Python »

    Tentang Ian Currie

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?
    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Ian adalah kutu buku Python yang menggunakannya untuk segala hal mulai dari mengutak-atik hingga membantu orang dan perusahaan mengelola hari demi hari dan mengembangkan bisnis mereka

    » Lebih lanjut tentang Ian


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

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Aldren

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Geir Arne

    Bagaimana Anda menemukan kemunculan pertama dari suatu nilai dalam daftar python?

    Kate

    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

    Bagaimana menemukan kejadian terakhir dari suatu elemen dalam daftar dengan Python?

    Metode rfind() menemukan kemunculan terakhir dari nilai yang ditentukan. Metode rfind() mengembalikan -1 jika nilainya tidak ditemukan. Metode rfind() hampir sama dengan metode rindex().

    Bagaimana menemukan semua kemunculan elemen dalam daftar Python?

    Salah satu cara paling dasar untuk mendapatkan posisi indeks dari semua kemunculan elemen dalam daftar Python adalah dengan menggunakan perulangan for dan fungsi enumerasi Python. The enumerate function is used to iterate over an object and returns both the index and element.

    Fungsi mana yang akan mengembalikan kejadian pertama dari elemen yang ditentukan dalam daftar dengan Python?

    Metode index() mengembalikan tampilan pertama dari nilai yang ditentukan.

    Bagaimana Anda mengembalikan kecocokan pertama dari daftar dengan Python?

    Ini berarti bahwa pertama kali Anda memanggil next() dengan generator iterator , itu akan menghasilkan elemen pertama yang Anda . Setelah generator selesai memproduksi kecocokan, itu akan mengembalikan nilai default yang diteruskan.