Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menyusun Senarai Dengan Cekap Berdasarkan Pelbagai Atribut dalam Python?

Bagaimanakah Saya Boleh Menyusun Senarai Dengan Cekap Berdasarkan Pelbagai Atribut dalam Python?

DDD
DDDasal
2024-12-11 18:02:13343semak imbas

How Can I Efficiently Sort a List Based on Multiple Attributes in Python?

Isih Senarai Berbilang Atribut

Isih senarai berdasarkan satu atribut adalah mudah. Walau bagaimanapun, apabila berbilang atribut menentukan susunan isihan, pendekatan yang lebih kompleks diperlukan.

Pertimbangkan senarai senarai berikut:

[[12, 'tall', 'blue', 1],
[2, 'short', 'red', 9],
[4, 'tall', 'blue', 13]]

Isih senarai ini semata-mata mengikut 'tinggi' atau ' atribut short' boleh dicapai menggunakan sorted(s, key = itemgetter(1)). Walau bagaimanapun, jika susunan isihan mesti berdasarkan kedua-dua atribut ketinggian dan warna, penyelesaian yang lebih cekap diperlukan.

Fungsi Utama Berbilang Atribut

Untuk mengisih senarai dengan berbilang atribut, fungsi utama boleh ditakrifkan yang mengembalikan tuple yang mewakili susunan isihan yang diingini. Sebagai contoh, fungsi kekunci berikut mengisih mengikut ketinggian dahulu dan kemudian mengikut warna:

key = lambda x: (x[1], x[2])

Menggunakan fungsi kekunci ini, senarai boleh diisih seperti berikut:

s = sorted(s, key=key)

Sebagai alternatif, itemgetter () boleh digunakan untuk mencapai hasil yang sama dengan lebih cekap:

import operator
key = operator.itemgetter(1, 2)

Fungsi utama ini kedua-duanya lebih pantas dan tidak melibatkan Panggilan fungsi Python.

Isih Terus

Akhir sekali, pendekatan di atas boleh dipermudahkan lagi dengan menggunakan kaedah sort() dan bukannya sorted() dan menetapkan semula. Ini menghapuskan keperluan untuk mencipta senarai baharu:

s.sort(key=key)

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun Senarai Dengan Cekap Berdasarkan Pelbagai Atribut dalam 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