Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengulangi Pasangan Bertindih (atau Windows N-elemen) Nilai Senarai dalam Python dengan Cekap?

Bagaimanakah Saya Boleh Mengulangi Pasangan Bertindih (atau Windows N-elemen) Nilai Senarai dalam Python dengan Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-22 17:48:15333semak imbas

How Can I Efficiently Iterate Over Overlapping Pairs (or N-element Windows) of List Values in Python?

Lelaran Bertindih Pasangan Nilai Senarai

Apabila mengulangi senarai Python, selalunya perlu untuk mengakses kedua-dua elemen semasa dan seterusnya. Walaupun menggunakan fungsi zip untuk menggandingkan nilai berturut-turut adalah berkesan, mungkin terdapat pendekatan yang lebih cekap.

Menggunakan Fungsi berpasangan()

Python 3.8 menyediakan itertools. fungsi pairwise(), yang memasangkan elemen berturut-turut bagi an iterable:

import itertools

def pairwise(iterable):
    "s -> (s0, s1), (s1, s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return zip(a, b)

Fungsi ini mencipta dua iterator, a dan b, menunjuk kepada elemen pertama bagi input boleh lelar. b maju satu langkah, menghasilkan penunjuk ke elemen semasa dan b menunjuk ke elemen seterusnya. zip kemudiannya digunakan untuk menggandingkan elemen daripada kedua-dua iterator.

Contoh Penggunaan:

the_list = ['a', 'b', 'c', 'd']

for current, next in pairwise(the_list):
    print(current, next)

# Output:
# a b
# b c
# c d

Kaveat:

Adalah penting untuk ambil perhatian bahawa pairwise() berfungsi dengan mengulangi yang boleh diulang beberapa kali. Ini bermakna jika satu iterator maju dengan ketara lebih pantas daripada yang lain, pelaksanaan mungkin mengekalkan elemen yang digunakan dalam ingatan untuk memastikan ia tersedia kepada semua iterator.

Pilihan Lain untuk Windows elemen N

Fungsi berpasangan() boleh dilanjutkan untuk mencipta tetingkap sewenang-wenangnya saiz:

def n_wise(iterable, n):
    "s -> (s0, s1, ..., s(n-1)), (s1, s2, ..., s(n)), ..."
    iterators = itertools.tee(iterable, n)
    for i in range(1, n):
        next(iterators[i], None)
    return zip(*iterators)

Contohnya, untuk mengulang tiga kali ganda dalam senarai:

for triplet in n_wise(the_list, 3):
    print(*triplet)

# Output:
# a b c
# b c d

Kesimpulan:

Sementara kaedah tradisional lelaran pada pasangan bertindih menggunakan zip adalah berdaya maju, fungsi pairwise() dan n_wise menawarkan cara ringkas dan cekap untuk mencapai hasil yang sama untuk tingkap dalam sebarang saiz.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulangi Pasangan Bertindih (atau Windows N-elemen) Nilai Senarai dalam Python dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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