Hướng dẫn python custom sort - phân loại tùy chỉnh python

Danh sách sắp xếp Python

sửa đổi lần cuối ngày 29 tháng 11 năm 2021

Nội dung chính

  • Danh sách sắp xếp Python
  • Hướng dẫn danh sách sắp xếp Python chỉ ra cách sắp xếp các yếu tố danh sách bằng ngôn ngữ Python.
  • Sắp xếp đơn hàng
  • Sắp xếp ổn định
  • Chức năng sắp xếp Python
  • Danh sách sắp xếp Python tại chỗ
  • Python sắp xếp ví dụ
  • Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần
  • Danh sách ngày của Python
  • Danh sách sắp xếp Python theo chỉ mục phần tử
  • Danh sách sắp xếp Python theo tổng của danh sách lồng nhau
  • Danh sách sắp xếp Python của các chuỗi cục bộ
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python theo độ dài chuỗi
  • Danh sách sắp xếp Python theo trường hợp
  • Danh sách sắp xếp Python theo tên cuối cùng
  • Danh sách sắp xếp python
  • Danh sách sắp xếp Python theo nhiều tiêu chí sắp xếp
  • Danh sách sắp xếp Python của các đối tượng phức tạp tùy chỉnh - Túi tiền xu

Nội phân chính

  • Danh sách sắp xếp Python
  • Sắp xếp đơn hàng
  • Sắp xếp ổn định
  • Chức năng sắp xếp Python
  • Danh sách sắp xếp Python tại chỗ
  • Python sắp xếp ví dụ
  • Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần
  • Danh sách ngày của Python
  • Danh sách sắp xếp Python theo chỉ mục phần tử
  • Danh sách sắp xếp Python theo tổng của danh sách lồng nhau
  • Danh sách sắp xếp Python của các chuỗi cục bộ
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python theo độ dài chuỗi
  • Danh sách sắp xếp Python theo trường hợp
  • Danh sách sắp xếp Python theo tên cuối cùng
  • Danh sách sắp xếp python
  • Danh sách sắp xếp Python theo nhiều tiêu chí sắp xếp
  • Danh sách sắp xếp Python của các đối tượng phức tạp tùy chỉnh - Túi tiền xu

Nội phân chính

  • Danh sách sắp xếp Python
  • Sắp xếp đơn hàng
  • Sắp xếp ổn định
  • Chức năng sắp xếp Python
  • Danh sách sắp xếp Python tại chỗ
  • Python sắp xếp ví dụ
  • Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần
  • Danh sách ngày của Python
  • Danh sách sắp xếp Python theo chỉ mục phần tử
  • Danh sách sắp xếp Python theo tổng của danh sách lồng nhau
  • Danh sách sắp xếp Python của các chuỗi cục bộ
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python theo độ dài chuỗi
  • Danh sách sắp xếp Python theo trường hợp
  • Danh sách sắp xếp Python theo tên cuối cùng
  • Danh sách sắp xếp python
  • Danh sách sắp xếp Python theo nhiều tiêu chí sắp xếp
  • Danh sách sắp xếp Python của các đối tượng phức tạp tùy chỉnh - Túi tiền xu

Nội phân chính

  • Danh sách sắp xếp Python
  • Sắp xếp đơn hàng
  • Sắp xếp ổn định
  • Chức năng sắp xếp Python
  • Danh sách sắp xếp Python tại chỗ
  • Python sắp xếp ví dụ
  • Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần
  • Danh sách ngày của Python
  • Danh sách sắp xếp Python theo chỉ mục phần tử
  • Danh sách sắp xếp Python theo tổng của danh sách lồng nhau
  • Danh sách sắp xếp Python của các chuỗi cục bộ
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python
  • Danh sách sắp xếp Python theo độ dài chuỗi
  • Danh sách sắp xếp Python theo trường hợp
  • Danh sách sắp xếp Python theo tên cuối cùng
  • Danh sách sắp xếp python
  • Danh sách sắp xếp Python theo nhiều tiêu chí sắp xếp
  • Danh sách sắp xếp Python của các đối tượng phức tạp tùy chỉnh - Túi tiền xu
  • Sắp xếp ổn định

Chức năng sắp xếp Python

Hướng dẫn danh sách sắp xếp Python chỉ ra cách sắp xếp các yếu tố danh sách bằng ngôn ngữ Python.

Sắp xếp đơn hàng

Sắp xếp ổn định

Chức năng sắp xếp Python

Sắp xếp đơn hàng

Sắp xếp ổn định

Sắp xếp ổn định

Chức năng sắp xếp Python

Danh sách sắp xếp Python tại chỗ 593. A stable sorting produces the following: 1335579. The ordering of the values 3 and 5 is kept. An unstable sorting may produce the following: 1335579.

Python sắp xếp ví dụ

Chức năng sắp xếp Python

Danh sách sắp xếp Python tại chỗ

Python sắp xếp ví dụ

Danh sách sắp xếp Python tại chỗ

Python sắp xếp ví dụ

inplace_sort.py

Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần

Danh sách ngày của Python

Danh sách sắp xếp Python theo chỉ mục phần tử

Python sắp xếp ví dụ

Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần

sorted_fun.py

#! print ('Bản gốc:', từ) in ('Sắp xếp:', Sắp xếp_words)

Ví dụ tạo ra một danh sách các từ được sắp xếp mới từ danh sách gốc, còn nguyên vẹn.

$. ',' Falcon ',' Forest ',' Rock ',' Sky ',' Tree ',' Wood ']]

Danh sách sắp xếp Python theo thứ tự tăng dần/giảm dần

Thứ tự tăng dần/giảm dần được kiểm soát với tùy chọn đảo ngược.

asc_desc.py

#! (từ) Words.sort (đảo ngược = true) in (từ)

Ví dụ sắp xếp danh sách các từ theo thứ tự tăng dần và giảm dần.

$. ',' rock ',' nghèo ',' rừng ',' đám mây ',' arc ']]]

Danh sách ngày của Python

Trong ví dụ tiếp theo, chúng tôi sắp xếp một danh sách các ngày.

sort_date.py

#! Sắp xếp (key = lambda d: dateTime.strptime (d, "%d-%b-%y")) in (giá trị)

Hàm ẩn danh sử dụng hàm Strptime, tạo ra một đối tượng DateTime từ chuỗi đã cho. Thực tế, hàm sắp xếp sắp xếp các đối tượng DateTime.

Nếu bạn không quen thuộc với từ khóa Lambda, hãy tìm hiểu thêm về các chức năng ẩn danh trong hướng dẫn Python Lambda.

$. /Sort_date.py ['21 -jun-16 ',' 1-nov-18 ',' 7-APR-19 ',' 8-NOV-19 ']]]

Danh sách sắp xếp Python theo chỉ mục phần tử

Một danh sách Python có thể có các vòng lặp lồng nhau. Trong những trường hợp như vậy, chúng ta có thể chọn các yếu tố nên được sắp xếp.

sort_elem_idx.py

#!/usr/bin/env python vals = [(4, 0), (0, -2), (3, 5), (1, 1), (-1, 3)] vals.sort () (Vals) Vals.sort (key = Lambda E: E [1]) In (Vals)

Ví dụ sắp xếp các bộ dữ liệu lồng nhau ban đầu theo các yếu tố đầu tiên của họ, sau đó là thứ hai của chúng.

vals.sort (key = Lambda E: E [1])

Bằng cách cung cấp một hàm ẩn danh trả về phần tử thứ hai của tuple, chúng tôi sắp xếp các bộ dữ liệu theo các giá trị thứ hai của chúng.

$. 0), (1, 1), (-1, 3), (3, 5)]]

Danh sách sắp xếp Python theo tổng của danh sách lồng nhau

Giả sử chúng tôi có danh sách lồng nhau mà tất cả đều có một số bảng xếp hạng khác nhau. Xếp hạng cuối cùng là tổng của tất cả các giá trị.

sort_sum.py

#! ], [6, 7, 8, 9], [5, 5, 5, 1], [5, 5, 5, 5], [3, 4, 5, 6], [10, 1, 1, 2, ]] data.sort () in (dữ liệu) data.sort (key = sum) in (dữ liệu)

Theo mặc định, các hàm sắp xếp sắp xếp theo giá trị đầu tiên của danh sách lồng nhau. Để đạt được mục tiêu của chúng tôi, chúng tôi chuyển chức năng tổng tích hợp cho tùy chọn chính.

$ ./sort_sum.py [[3, 4, 5, 6], [5, 5, 5, 1], [5, 5, 5, 5], [6, 7, 8, 9], [8, 9, 10, 11], [9, 10, 11, 12], [10, 1, 1, 2], [10, 9, 8, 7], [10, 11, 12, 13]] [[10 , 1, 1, 2], [5, 5, 5, 1], [3, 4, 5, 6], [5, 5, 5, 5], [6, 7, 8, 9], [10 , 9, 8, 7], [8, 9, 10, 11], [9, 10, 11, 12], [10, 11, 12, 13]]]]

Ví dụ hiển thị mặc định và sắp xếp tùy chỉnh.

Danh sách sắp xếp Python của các chuỗi cục bộ

Để sắp xếp nhận thức địa phương, chúng ta có thể sử dụng locale.strxfrm cho chức năng chính.

locale_sort.py

#! 'Prameň', 'SOB'] Locale.SetLocale (locale.lc_collate, ('sk_sk', 'utf8')) words.sort (key = locale.strxfrm) cho từ trong từ: in (từ)

Ví dụ sắp xếp các từ slovak.

$ ./locale_sort.py Cesta černice

Lưu ý: Thứ tự kết quả của các từ Slovak không hoàn toàn chính xác. Chữ ď đi sau d. Nó phụ thuộc vào việc ngôn ngữ được hỗ trợ tốt như thế nào. the resulting order of the Slovak words is not entirely correct. The letter ď goes after d. It depends on how well the language is supported. the resulting order of the Slovak words is not entirely correct. The letter ď goes after d. It depends on how well the language is supported.

Danh sách sắp xếp Python

Khi sắp xếp từ điển, chúng ta có thể chọn thuộc tính mà việc sắp xếp được thực hiện.

sort_dict.py

#! : 'Robert Brown', 'Date_of_birth': 1977}, {'name': 'Lucia Smith', 'Date_of_birth': 2002}, .

Chúng tôi có một danh sách người dùng. Mỗi người dùng được đại diện bởi một từ điển.

Users.Sort (Reverse = true, key = lambda e: e ['date_of_birth']))

Trong hàm ẩn danh, chúng tôi chọn thuộc tính DATE_OF_BIRTH.

$. ': 1994} {' name ':' John Doe ',' Date_of_birth ': 1987} {' name ':' Robert Brown ','

Người dùng được sắp xếp theo ngày sinh của họ theo thứ tự giảm dần.

Danh sách sắp xếp Python

Khi sắp xếp từ điển, chúng ta có thể chọn thuộc tính mà việc sắp xếp được thực hiện.

grades.py

#! : 'Robert Brown', 'Date_of_birth': 1977}, {'name': 'Lucia Smith', 'Date_of_birth': 2002}, .

Chúng tôi có một danh sách người dùng. Mỗi người dùng được đại diện bởi một từ điển.

Users.Sort (Reverse = true, key = lambda e: e ['date_of_birth']))

Trong hàm ẩn danh, chúng tôi chọn thuộc tính DATE_OF_BIRTH.

$. ': 1994} {' name ':' John Doe ',' Date_of_birth ': 1987} {' name ':' Robert Brown ','

Hàm chính chỉ đơn giản là trả về giá trị của lớp.

# Từ người vận hành nhập itemgetter # student.sort (key = lambda e: itemgetter (e [1]) (lớp)))

Giải pháp này sử dụng một chức năng ẩn danh.

$. , 'C': 7, 'c-': 8, 'd+': 9, 'd': 10} [('anna', 'a+'), ('jan', 'a'), ('zoltan ',' A- '), (' Jozef ',' B '), (' Rebecca ',' B- '), (' Sofia ',' C+'), (' Michelle ',' C- '), ('Michael', 'd+')]]

Danh sách sắp xếp Python theo độ dài chuỗi

Đôi khi, chúng ta cần phải sắp xếp các chuỗi theo chiều dài của chúng.

sort_by_len.py

#! , 'if'] words.sort (đảo ngược = true, key = w_len) in (từ)

Trong ví dụ này, chúng tôi không sử dụng chức năng ẩn danh.

def w_len (e): trả lại len (e)

Hàm w_len trả về độ dài của từng phần tử.

$ ./sort_by_len.py ['rừng', 'đám mây', 'gỗ', 'công cụ', 'nghèo', 'rock', 'bầu trời', 'nếu']]]

Các từ được đặt hàng theo độ dài của chúng theo thứ tự giảm dần.

Danh sách sắp xếp Python theo trường hợp

Theo mặc định, các chuỗi có chữ cái đầu tiên được sắp xếp trước các chuỗi khác. Chúng tôi có thể sắp xếp các chuỗi bất kể trường hợp của họ là tốt.

case_sorting.py

#!/usr/bin/env python văn bản = 'Hôm nay là một ngày đẹp trời. Andy đã đi câu cá. ' words = text.replace ('.', '') sort_words = sort (words.split (), key = str.Lower) in ('trường hợp không nhạy cảm:' ('Trường hợp nhạy cảm:', Sắp xếp_words2)

Bằng cách cung cấp chức năng str.lower cho thuộc tính chính, chúng tôi thực hiện phân loại trường hợp không nhạy cảm.

$. 'Hôm nay', 'a', 'đẹp', 'ngày', 'câu cá', 'là', 'đã đi']]]

Danh sách sắp xếp Python theo tên cuối cùng

Trong ví dụ sau, chúng tôi sắp xếp tên theo họ.

sort_by_lastname.py

#! ',' Harold Andras ',' Albert Doe '] Tên.sort () Tên.sort (key = lambda E: e.split () [-1]) cho tên trong tên: in (tên)

Chúng tôi có một danh sách các tên. Mỗi tên bao gồm một tên và họ. Ngoài ra, có một số người dùng có cùng tên. Trong trường hợp như vậy, chúng tôi muốn chúng được sắp xếp theo tên đầu tiên của họ.

Tên.sort () Tên.sort (key = lambda E: e.split () [-1])

Đầu tiên, chúng tôi sắp xếp tên theo tên của họ. Sau đó, chúng tôi sắp xếp tên theo họ của họ. Để làm như vậy, chúng tôi phân chia từng chuỗi và chọn chuỗi cuối cùng (nó có chỉ mục -1.) Vì thuật toán sắp xếp của Python ổn định, việc sắp xếp đầu tiên được ghi nhớ và chúng tôi nhận được đầu ra mong đợi.

$.

Các tên được sắp xếp theo tên cuối cùng của họ. Người dùng DOE được sắp xếp chính xác theo tên của họ.

Danh sách sắp xếp python

Trong ví dụ tiếp theo, chúng tôi sắp xếp có tên.

namedtuple_sort.py

#! 1759000) C3 = Thành phố (3, 'Prague', 1280000) C4 = City (4, 'Warsaw', 1748000) C5 = City (5, 'Los Angeles', 3971000) C6 = City (6, 'Edinburgh', 464000 ) C7 = Thành phố (7, 'Berlin', 3671000) Thành phố = [C1, C2, C3, C4, C5, C6, C7] Thành phố thành phố)

Thành phố tên là ba thuộc tính: ID, tên và dân số. Ví dụ sắp xếp các tên gọi theo tên của họ.

Thành phố.sort (key = Lambda E: E.Name)

Hàm ẩn danh trả về thuộc tính tên của tên được đặt tên.

$. Dân số = 1759000) Thành phố (id = 6, name = 'Edinburgh', dân số = 464000) Thành phố (ID = 5, name = 'Los Angeles', Dân số = 3971000) Thành phố (id = 3, name = 'Prague', dân số = 1280000) Thành phố (id = 4, name = 'warsaw', dân số = 1748000)

Danh sách sắp xếp Python theo nhiều tiêu chí sắp xếp

Ví dụ sau đây sắp xếp một danh sách sinh viên theo hai tiêu chí sắp xếp.

multiple_sort.py

#!/usr/bin/env Python từ việc nhập nhập có tênTuple từ nhà điều hành nhập attrgetter def multi_sort (dữ liệu, thông số kỹ thuật): cho khóa, đảo ngược trong đảo ngược (thông số kỹ thuật): data.sort (key = agrgetter (key), đảo ngược = đảo ngược) Return Data Class Student (tên có tên): ID: Int Tên: Str Lớp: Str Age: int S1 = Student (1, 'Patrick', 'A', 21) S2 = Student (2, 'Lucia', 'B', 19) S3 = Sinh viên (3, 'Robert', 'C', 19) S4 = Student (4, 'Monika', 'A', 22) S5 = Student (5, 'Thomas', 'D', 20) S6 = Sinh viên (6, 'Petra', 'B', 18) S6 = Student (7, 'Sofia', 'A', 18) S7 = Student (8, 'Harold', 'E', 22) S8 = S8 = Học sinh (9, 'Arnold', 'B', 23) Học sinh = [S1, S2, S3, S4, S5, S6, S7, S8] Multi_Sort (Học sinh, (('Lớp', Sai), ('Tuổi' , Đúng))) cho sinh viên trong học sinh: in (sinh viên)

Đầu tiên, các học sinh được sắp xếp theo lớp theo thứ tự tăng dần, sau đó chúng được sắp xếp theo độ tuổi theo thứ tự giảm dần.

def multi_sort (dữ liệu, thông số kỹ thuật): cho khóa, đảo ngược trong đảo ngược (thông số kỹ thuật): data.sort (key = attrgetter (key), lùi = đảo ngược) trả về dữ liệu

Phương thức Multi_Sort áp dụng tất cả các thông số kỹ thuật sắp xếp trong danh sách.

$. Học sinh (id = 7, name = 'sofia', plass = 'a', tuổi = 18) học sinh (id = 9, name = 'arnold', prade = 'b', age = 23) student (id = 2, Tên = 'Lucia', Lớp = 'B', Age = 19) Học sinh (id = 3, name = 'Robert', Lớp = 'C', Age = 19) Học sinh (id = 5, name = 'Thomas', Lớp = 'D', Age = 20) Học sinh (id = 8, name = 'Harold', Lớp = 'E', Age = 22)

Danh sách sắp xếp Python của các đối tượng phức tạp tùy chỉnh - Túi tiền xu

Chúng tôi có một đối tượng tùy chỉnh, có tênTuple, có một cách cụ thể để sắp xếp nó.

Lưu ý: Theo tài liệu Python, việc sắp xếp và sắp xếp chỉ sử dụng phương thức ma thuật __lt__ khi sắp xếp. Vì vậy, chúng ta chỉ cần thực hiện phương pháp này. Tuy nhiên, PEP8 khuyến nghị thực hiện tất cả sáu hoạt động (__eq__, __ne__, __lt__, __le__, __gt__, __ge__) để hoàn thành mã và an toàn.According to the Python documentation, the sort and sorted use only the __lt__ magic method when doing sorting. So we need to implement only this method. However, the PEP8 recommends to implement all six operations (__eq__ , __ne__ , __lt__ , __le__ , __gt__, __ge__) for safety and code completeness.According to the Python documentation, the sort and sorted use only the __lt__ magic method when doing sorting. So we need to implement only this method. However, the PEP8 recommends to implement all six operations (__eq__ , __ne__ , __lt__ , __le__ , __gt__, __ge__) for safety and code completeness.

Bộ trang trí Total_ordering từ mô -đun functools giúp giảm tấm nồi hơi. Total_ordering yêu cầu __eq__ và một trong các phương pháp còn lại được thực hiện.

sort_coins.py

#! .bag = [] def add (self, coin): self.bag.append (coin) def __eq __ (self, oth Sai def __lt __ (self, other): val1, val2 = self .__ Đánh giá (khác) nếu val1 Trong ví dụ, chúng tôi sắp xếp túi tiền. Có ba loại tiền: vàng, bạc và đồng. Một đồng vàng tương đương với hai đồng bạc và sáu đồng bằng đồng. (Do đó, một đồng bạc bằng ba đồng tiền.)Lớp Coin (tên được đặt tên): Xếp hạng: str

Đối tượng tùy chỉnh của chúng tôi là một tên gọi, có một thuộc tính: Xếp hạng.

@total_ordering Lớp túi: def __init __ (self): self.bag = [] def add (self, coin): self.bag.append (coin) ...

Túi có một danh sách túi nội bộ để lưu trữ tiền của nó. Trong lớp, chúng tôi có hai phương pháp so sánh: __lt__ và __eq__. Máy trang trí @total_ordering cung cấp phần còn lại.

def __lt __ (self, other): val1, val2 = self .__ đánh giá (khác) nếu val1 Phương pháp __lt__ được sử dụng bởi các hàm sắp xếp Python để so sánh hai đối tượng. Chúng ta phải tính toán giá trị của tất cả các đồng tiền trong hai túi và so sánh chúng.def __str __ (self): return f'pouch với: {self.bag} '

__Str__ đưa ra đại diện cho con người của đối tượng túi.

def __evaliated (self, other): val1 = 0 val2 = 0 cho tiền xu trong self.bag: if coin.rank == 'g': val1 += 6 nếu coin.Rank == 's': val1 += 3 nếu Coin.Rank == 'B': val1 += 1 cho tiền xu khác. .Rank == 'B': val2 += 1 return val1, val2

Phương pháp __evaliated tính toán các giá trị của hai túi. Nó trả về cả hai giá trị cho __lt__ để so sánh.

def created_pouches (): p1 = pouch () p1.add (coin ('g')) p1.add (coin ('b')) p1.add (coin ('s')) p2 = pouch () p2. Thêm (Coin ('G')) P2.Add (Coin ('S')) ...

Trong hàm created_pouches, chúng tôi tạo ra tám túi với số lượng tiền khác nhau.

túi.sort () cho e trong túi: in (e)

Chúng tôi sắp xếp túi túi và sau đó in các yếu tố của túi được sắp xếp.

$. Coin (Rank = 'B'), Coin (Rank = 'B'), Coin (Rank = 'B')] Túi với: [Coin (Rank = 'G')] Không = 'G'), Coin (Rank = 'B'), Coin (Rank = 'S')] Túi có: [Coin (Rank = 'G'), Coin (Rank = 'S'), Coin (xếp hạng = 'S'), Coin (Rank = 'B'), Coin (Rank = 'B'), Coin (Rank = 'B')] Túi có: [Coin (Rank = 'G'), Coin (Rank = ' g '), tiền xu (xếp hạng =' s ')]]

Đây là đầu ra. Túi có hai đồng vàng và một đồng bạc là giá trị nhất.

Trong hướng dẫn này, chúng tôi đã đề cập đến các hoạt động sắp xếp trong các danh sách trong Python.

Liệt kê tất cả các hướng dẫn Python.