Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Mengulangi Pasangan Bertindih (atau Tiga Kali ganda) Elemen dalam Senarai Python dengan Cekap?

Bagaimanakah Saya Boleh Mengulangi Pasangan Bertindih (atau Tiga Kali ganda) Elemen dalam Senarai Python dengan Cekap?

Mary-Kate Olsen
Lepaskan: 2024-12-16 14:53:17
asal
489 orang telah melayarinya

How Can I Efficiently Iterate Over Overlapping Pairs (or Triples) of Elements in a Python List?

Menyalurkan Pasangan Nilai Bertindih dalam Python

Apabila mengulang senarai dalam Python, anda mungkin perlu mengakses kedua-dua elemen semasa dan elemen seterusnya secara serentak. Secara tradisinya, ini telah dicapai menggunakan kod seperti:

for current, next in zip(the_list, the_list[1:]):
    # Do something
Salin selepas log masuk

Walau bagaimanapun, Python 3.8 memperkenalkan cara yang lebih cekap untuk mencapai ini:

Menggunakan Fungsi berpasangan

Dokumentasi Python menyediakan fungsi berpasangan mudah untuk ini tujuan:

import itertools

def pairwise(iterable):
    a, b = itertools.tee(iterable)
    next(b, None)
    return zip(a, b)
Salin selepas log masuk

Fungsi ini mencipta dua iterator, a dan b, yang menghala ke elemen pertama bagi input boleh lelar. Iterator b kemudiannya maju satu langkah, menghasilkan penunjuk ke elemen semasa dan b menunjuk ke elemen seterusnya. Fungsi zip kemudiannya digunakan untuk mencipta pasangan elemen ini.

Untuk Python 2

Untuk Python 2, anda boleh menggunakan fungsi berpasangan yang serupa dengan itertools.izip fungsi bukannya zip:

import itertools

def pairwise(iterable):
    a, b = itertools.tee(iterable)
    next(b, None)
    return itertools.izip(a, b)
Salin selepas log masuk

Mengerti kepada Berbilang Elemen

Fungsi berpasangan boleh digeneralisasikan untuk menghasilkan tetingkap elemen yang lebih besar dengan melaraskan parameter n dalam panggilan tee. Sebagai contoh, untuk mencipta pasangan tiga elemen, anda boleh menggunakan:

def threes(iterator):
    a, b, c = itertools.tee(iterator, 3)
    next(b, None)
    next(c, None)
    next(c, None)
    return zip(a, b, c)
Salin selepas log masuk

Kaveat

Adalah penting untuk ambil perhatian bahawa teknik ini boleh menggunakan sejumlah besar memori jika satu iterator maju lebih jauh daripada yang lain. Ini boleh berlaku apabila saiz tetingkap besar atau jika terdapat banyak elemen dalam leterable asal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi Pasangan Bertindih (atau Tiga Kali ganda) Elemen dalam Senarai Python dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan