Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengenalpasti Kumpulan Nombor Berturut-turut dengan Cekap dalam Senarai Python?

Bagaimanakah Saya Boleh Mengenalpasti Kumpulan Nombor Berturut-turut dengan Cekap dalam Senarai Python?

Patricia Arquette
Patricia Arquetteasal
2024-12-07 22:21:13362semak imbas

How Can I Efficiently Identify Consecutive Number Groups in a Python List?

Mengenal pasti Kumpulan Nombor Berturut-turut dalam Senarai

Apabila berhadapan dengan tugas mengenal pasti kumpulan nombor berturut-turut dalam senarai, terdapat pelbagai pendekatan untuk dipertimbangkan.

Sawa Terbina Kefungsian

Python menyediakan alat yang berkuasa untuk tugas ini: fungsi groupby(). Dengan menggunakan fungsi ini, kita boleh mengkategorikan elemen berdasarkan perbezaan antara indeks dan nilainya. Sebagai contoh, dalam senarai [2, 3, 4, 5, 12, 13, 14, 15, 16, 17], fungsi groupby() akan mengeluarkan kumpulan berikut:

[(2, [2, 3, 4, 5]), (12, [12, 13, 14, 15, 16, 17])]

Di sini, setiap kumpulan terdiri daripada elemen yang indeksnya berbeza daripada nilainya dengan jumlah yang sama, menunjukkan berturut-turut nombor.

Fungsi Tersuai

Pendekatan alternatif melibatkan mencipta fungsi tersuai. Satu pelaksanaan diberikan di bawah:

ranges = []
for key, group in groupby(enumerate(data), lambda (index, item): index - item):
    group = map(itemgetter(1), group)
    if len(group) > 1:
        ranges.append(xrange(group[0], group[-1]))
    else:
        ranges.append(group[0])

Fungsi ini menjana senarai tupel, di mana setiap tupel mewakili kumpulan nombor berturut-turut. Untuk input [2, 3, 4, 5, 12, 13, 14, 15, 16, 17], outputnya ialah:

[(2, 5), (12, 17), 20]

Perhatikan bahawa nombor individu dikembalikan sebagai elemen individu dan bukannya julat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengenalpasti Kumpulan Nombor Berturut-turut dengan Cekap dalam Senarai Python?. 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