Chúng ta có thể sử dụng sắp xếp cho mảng trong Python không?

Nếu bạn muốn tìm hiểu cách làm việc với phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 trong các dự án Python của mình, thì bài viết này là dành cho bạn. Phương pháp này rất mạnh mẽ và bạn có thể tùy chỉnh nó để phù hợp với nhu cầu của mình, vì vậy hãy xem cách thức hoạt động của nó một cách chi tiết

Bạn sẽ học

  • Cách sử dụng phương pháp này và tùy chỉnh chức năng của nó
  • Khi nào nên sử dụng và khi nào không nên sử dụng
  • Làm thế nào để gọi nó là vượt qua các kết hợp đối số khác nhau
  • Cách sắp xếp danh sách theo thứ tự tăng dần và giảm dần
  • Cách so sánh các phần tử của danh sách dựa trên các giá trị trung gian
  • Làm cách nào bạn có thể chuyển các hàm lambda cho phương thức này
  • So sánh phương thức này với hàm
    # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[]
    >>> b
    [2, 3, 3, 6, 7, 8, 9]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[]
    >>> c
    ['A', 'D', 'T', 'U', 'Z']
    
    8
  • Tại sao phương thức
    # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[]
    >>> b
    [2, 3, 3, 6, 7, 8, 9]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[]
    >>> c
    ['A', 'D', 'T', 'U', 'Z']
    
    7 thực hiện sắp xếp ổn định
  • Làm thế nào quá trình đột biến hoạt động đằng sau hậu trường

Bạn đã sẵn sàng chưa? . ⭐

🔹 Mục đích và trường hợp sử dụng

Với phương pháp

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7, bạn có thể sắp xếp một danh sách theo một trong hai

  • Thứ tự tăng dần
  • Thứ tự giảm dần

Phương pháp này được sử dụng để sắp xếp một danh sách tại chỗ, có nghĩa là nó thay đổi nó hoặc sửa đổi nó trực tiếp mà không tạo thêm các bản sao, vì vậy hãy nhớ

Bạn sẽ tìm hiểu thêm về đột biến trong bài viết này [tôi hứa. ], nhưng hiện tại, điều rất quan trọng là bạn phải biết rằng phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 sửa đổi danh sách, vì vậy phiên bản gốc của nó bị mất

Do đó, bạn chỉ nên sử dụng phương pháp này nếu

  • Bạn muốn sửa đổi [sắp xếp] danh sách vĩnh viễn
  • Bạn không cần giữ phiên bản gốc của danh sách

Nếu điều này phù hợp với nhu cầu của bạn, thì phương pháp

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
2 chính xác là thứ bạn đang tìm kiếm

🔸 Cú pháp và đối số

Hãy xem cách bạn có thể gọi

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
2 để tận dụng toàn bộ sức mạnh của nó

Đây là cuộc gọi cơ bản nhất [không có đối số]

Nếu bạn không chuyển bất kỳ đối số nào, theo mặc định

  • Danh sách sẽ được sắp xếp tăng dần
  • Các phần tử của danh sách sẽ được so sánh trực tiếp bằng cách sử dụng các giá trị của chúng với toán tử
    # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[reverse=True]
    >>> b
    [9, 8, 7, 6, 3, 3, 2]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[reverse=True]
    >>> c
    ['Z', 'U', 'T', 'D', 'A']
    4

Ví dụ

________số 8_______

Đối số tùy chỉnh

Để tùy chỉnh cách thức hoạt động của phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7, bạn có thể truyền hai đối số tùy chọn

  • Chìa khóa
  • Đảo ngược

Hãy xem cách họ thay đổi hành vi của phương pháp này. Ở đây chúng ta có một cuộc gọi phương thức với hai đối số này

Trước khi giải thích cách chúng hoạt động, tôi muốn giải thích một điều mà bạn có thể nhận thấy trong sơ đồ trên – trong lệnh gọi phương thức, tên của các tham số phải được đưa vào trước các giá trị tương ứng của chúng, như thế này

  • # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[reverse=True]
    >>> b
    [9, 8, 7, 6, 3, 3, 2]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[reverse=True]
    >>> c
    ['Z', 'U', 'T', 'D', 'A']
    6
  • # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[reverse=True]
    >>> b
    [9, 8, 7, 6, 3, 3, 2]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[reverse=True]
    >>> c
    ['Z', 'U', 'T', 'D', 'A']
    7

Điều này là bởi vì họ là. Nếu bạn đang chuyển một giá trị tùy chỉnh cho chúng, thì tên của chúng phải được chỉ định trong lệnh gọi phương thức, theo sau là dấu bằng

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
8 và các giá trị tương ứng của chúng, như thế này

Mặt khác, nếu bạn cố gắng truyền đối số trực tiếp như cách chúng ta thường làm đối với tham số vị trí, bạn sẽ thấy lỗi này vì hàm sẽ không biết đối số nào tương ứng với tham số nào

TypeError: sort[] takes no positional arguments

Đảo ngược

Bây giờ bạn đã biết đối số chỉ có từ khóa là gì, hãy bắt đầu với

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
9

Giá trị của

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
9 có thể là
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
1 hoặc
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
2

  • >>> d = ["aaa", "bb", "c"]
    >>> d.sort[key=len]
    >>> d
    ['c', 'bb', 'aaa']
    2 có nghĩa là danh sách sẽ được sắp xếp theo thứ tự tăng dần
  • >>> d = ["aaa", "bb", "c"]
    >>> d.sort[key=len]
    >>> d
    ['c', 'bb', 'aaa']
    1 có nghĩa là danh sách sẽ được sắp xếp theo thứ tự giảm dần [đảo ngược]

💡 Mẹo. Theo mặc định, giá trị của nó là

>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
2 – nếu bạn không chuyển bất kỳ đối số nào cho tham số này, danh sách sẽ được sắp xếp theo thứ tự tăng dần

Ở đây chúng tôi có một vài ví dụ

Theo mặc định, đảo ngược là Sai
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']

💡 Mẹo. Nếu các phần tử của danh sách là chuỗi, chúng được sắp xếp theo thứ tự bảng chữ cái

Để xác định điều ngược lại là Đúng, vì vậy danh sách phải được sắp xếp theo thứ tự giảm dần [đảo ngược].
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']

💡 Mẹo. Lưu ý cách danh sách được sắp xếp theo thứ tự giảm dần nếu

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
9 là
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
1

Chìa khóa

Bây giờ bạn đã biết cách làm việc với tham số

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
9, hãy xem tham số
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9

Tham số này chi tiết hơn một chút vì nó xác định cách so sánh các phần tử của danh sách trong quá trình sắp xếp

Cú pháp cơ bản

Giá trị của

>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9 là

  • >>> "E" < "e"
    True
    1, có nghĩa là các phần tử của danh sách sẽ được so sánh trực tiếp. Ví dụ, trong một danh sách các số nguyên, bản thân các số nguyên có thể được sử dụng để so sánh
  • Hàm của một đối số tạo ra giá trị trung gian cho từng phần tử. Giá trị trung gian này chỉ được tính một lần và được dùng để so sánh trong toàn bộ quá trình sắp xếp. Chúng tôi sử dụng điều này khi chúng tôi không muốn so sánh trực tiếp các phần tử, ví dụ: khi chúng tôi muốn so sánh các chuỗi dựa trên độ dài của chúng [giá trị trung gian]

💡 Mẹo. Theo mặc định, giá trị của

>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9 là
>>> "E" < "e"
True
1, vì vậy các phần tử được so sánh trực tiếp

Ví dụ

Giả sử chúng ta muốn sắp xếp danh sách các chuỗi dựa trên độ dài của chúng, từ chuỗi ngắn nhất đến chuỗi dài nhất. Chúng ta có thể truyền hàm

>>> "E" < "e"
True
4 làm giá trị của
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9, như thế này

>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']

💡 Mẹo. Lưu ý rằng chúng tôi chỉ chuyển tên của hàm [_______28_______4] mà không có dấu ngoặc đơn vì chúng tôi không gọi hàm. Cái này rất quan trọng

Lưu ý sự khác biệt giữa so sánh trực tiếp các phần tử và so sánh độ dài của chúng [xem bên dưới]. Sử dụng giá trị mặc định của

>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9 [
>>> "E" < "e"
True
1] sẽ sắp xếp các chuỗi theo thứ tự bảng chữ cái [trái], nhưng bây giờ chúng tôi đang sắp xếp chúng dựa trên độ dài của chúng [phải]

Điều gì xảy ra đằng sau hậu trường?

Điều này dẫn đến một danh sách có tiêu chí sắp xếp khác. chiều dài

Ở đây chúng ta có một ví dụ khác

Một ví dụ thú vị khác là sắp xếp danh sách các chuỗi như thể tất cả chúng được viết bằng chữ thường [ví dụ: tạo "Aa" tương đương với "aa"]

Theo thứ tự từ điển, chữ hoa đứng trước chữ thường

>>> "E" < "e"
True

Vì vậy, chuỗi

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
0 sẽ xuất hiện trước
>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
1 trong một danh sách được sắp xếp, ngay cả khi các phiên bản chữ thường của chúng sẽ theo thứ tự ngược lại

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False

Để tránh phân biệt giữa chữ hoa và chữ thường, chúng ta có thể chuyển hàm

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
2 thành
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9. Điều này sẽ tạo ra một phiên bản chữ thường của các chuỗi sẽ được sử dụng để so sánh

>>> e = ["Emma", "emily", "Amy", "Jason"]
>>> e.sort[key=str.lower]
>>> e
['Amy', 'emily', 'Emma', 'Jason']

Lưu ý rằng bây giờ,

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
1 đứng trước
>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
0 trong danh sách đã sắp xếp, đây chính xác là những gì chúng ta muốn

💡 Mẹo. nếu chúng tôi đã sử dụng quy trình sắp xếp mặc định, tất cả các chuỗi bắt đầu bằng chữ in hoa sẽ xuất hiện trước tất cả các chuỗi bắt đầu bằng chữ thường

>>> e = ["Emma", "emily", "Amy", "Jason"]
>>> e.sort[]
>>> e
['Amy', 'Emma', 'Jason', 'emily']

Dưới đây là một ví dụ sử dụng Lập trình hướng đối tượng [OOP]

Nếu chúng ta có lớp Python rất đơn giản này

>>> class Client:
	def __init__[self, age]:
		self.age = age

Và chúng tôi tạo ra bốn trường hợp

TypeError: sort[] takes no positional arguments
0

Chúng ta có thể tạo một danh sách tham khảo chúng

TypeError: sort[] takes no positional arguments
1

Sau đó, nếu chúng ta định nghĩa một hàm để lấy

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
6 trong số các trường hợp này

TypeError: sort[] takes no positional arguments
2

Chúng ta có thể sắp xếp danh sách dựa trên tuổi của họ bằng cách chuyển hàm

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
7 một đối số

TypeError: sort[] takes no positional arguments
3

Đây là phiên bản cuối cùng, được sắp xếp của danh sách. Chúng tôi sử dụng vòng lặp for để in tuổi của các cá thể theo thứ tự chúng xuất hiện trong danh sách

TypeError: sort[] takes no positional arguments
4

Chính xác những gì chúng tôi muốn – bây giờ danh sách được sắp xếp theo thứ tự tăng dần dựa trên tuổi của các cá thể

💡 Mẹo. Thay vì xác định hàm

>>> "Emma" < "emily"
True
>>> "emma" < "emily"
False
7, chúng ta có thể sử dụng hàm lambda để lấy tuổi của từng phiên bản, như thế này

TypeError: sort[] takes no positional arguments
5

Các hàm lambda là các hàm ẩn danh nhỏ và đơn giản, có nghĩa là chúng không có tên. Chúng rất hữu ích cho những trường hợp này khi chúng tôi chỉ muốn sử dụng chúng ở những nơi cụ thể trong một khoảng thời gian rất ngắn

Đây là cấu trúc cơ bản của hàm lambda mà chúng ta đang sử dụng để sắp xếp danh sách

Cấu trúc cơ bản của hàm Lambda

Vượt qua cả hai đối số

Đáng kinh ngạc. Bây giờ bạn đã biết cách tùy chỉnh chức năng của phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7. Nhưng bạn có thể nâng kỹ năng của mình lên một cấp độ hoàn toàn mới bằng cách kết hợp hiệu ứng của
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9 và
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
9 trong cùng một lệnh gọi phương thức

TypeError: sort[] takes no positional arguments
6Sắp xếp danh sách theo thứ tự ngược lại như thể các chuỗi đều ở dạng chữ thường

Đây là những kết hợp khác nhau của các đối số và tác dụng của chúng

Thứ tự của các đối số chỉ từ khóa không thành vấn đề

Vì chúng tôi đang chỉ định tên của các đối số, nên chúng tôi đã biết giá trị nào tương ứng với tham số nào, vì vậy chúng tôi có thể đưa

>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9 hoặc
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
9 vào đầu tiên trong danh sách và hiệu ứng sẽ hoàn toàn giống nhau

Vì vậy, phương pháp này gọi

Tương đương với

Đây là một ví dụ

TypeError: sort[] takes no positional arguments
7

Nếu chúng ta thay đổi thứ tự của các đối số, chúng ta sẽ nhận được kết quả chính xác như vậy

TypeError: sort[] takes no positional arguments
8

🔹 Giá trị trả về

Bây giờ hãy nói một chút về giá trị trả về của phương thức này. Phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 trả về
>>> "E" < "e"
True
1 – nó không trả về một phiên bản được sắp xếp của danh sách, như chúng ta có thể mong đợi bằng trực giác

Theo

Để nhắc nhở người dùng rằng nó hoạt động theo tác dụng phụ, nó không trả về chuỗi đã sắp xếp

Về cơ bản, điều này được sử dụng để nhắc nhở chúng tôi rằng chúng tôi đang sửa đổi danh sách gốc trong bộ nhớ, không tạo bản sao mới của danh sách

Đây là một ví dụ về giá trị trả về của

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7

TypeError: sort[] takes no positional arguments
9

Thấy?

💡 Mẹo. Điều rất quan trọng là không nhầm lẫn giữa phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 với hàm
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
8, đây là một hàm hoạt động rất giống nhau nhưng không sửa đổi danh sách ban đầu. Thay vào đó,
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
8 tạo và trả về một bản sao mới của danh sách, đã được sắp xếp

Đây là một ví dụ mà chúng ta có thể sử dụng để so sánh chúng

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
0Ví dụ về. sắp xếp[]
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
1Ví dụ về sắp xếp[]

Điều này rất quan trọng vì tác dụng của chúng rất khác nhau. Sử dụng phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 khi bạn dự định sử dụng
# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
8 có thể đưa các lỗi nghiêm trọng vào chương trình của bạn vì bạn có thể không nhận ra rằng danh sách đang bị thay đổi

🔸 Phương thức sort[] Thực hiện sắp xếp ổn định

Bây giờ hãy nói một chút về các đặc điểm của thuật toán sắp xếp được sử dụng bởi

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7

Phương pháp này thực hiện sắp xếp ổn định vì nó hoạt động với việc triển khai TimSort, một thuật toán sắp xếp ổn định và hiệu quả cao

Theo

Một sắp xếp ổn định nếu nó đảm bảo không thay đổi thứ tự tương đối của các phần tử được so sánh bằng nhau — điều này hữu ích cho việc sắp xếp theo nhiều lần [ví dụ: sắp xếp theo bộ phận, sau đó theo bậc lương]

Điều này có nghĩa là nếu hai phần tử có cùng giá trị hoặc giá trị trung gian [khóa], thì chúng được đảm bảo giữ nguyên thứ tự so với nhau

Hãy xem những gì tôi có ý nghĩa với điều này. Vui lòng xem ví dụ này trong giây lát

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
2

Chúng tôi đang so sánh các phần tử dựa trên độ dài của chúng vì chúng tôi đã chuyển hàm

>>> "E" < "e"
True
4 làm đối số cho
>>> d = ["aaa", "bb", "c"]
>>> d.sort[key=len]
>>> d
['c', 'bb', 'aaa']
9

Chúng ta có thể thấy rằng có ba phần tử có độ dài 2.

>>> e = ["Emma", "emily", "Amy", "Jason"]
>>> e.sort[]
>>> e
['Amy', 'Emma', 'Jason', 'emily']
6,
>>> e = ["Emma", "emily", "Amy", "Jason"]
>>> e.sort[]
>>> e
['Amy', 'Emma', 'Jason', 'emily']
7, và
>>> e = ["Emma", "emily", "Amy", "Jason"]
>>> e.sort[]
>>> e
['Amy', 'Emma', 'Jason', 'emily']
8 theo thứ tự đó

Bây giờ, lưu ý rằng ba phần tử này có cùng thứ tự tương đối trong danh sách được sắp xếp cuối cùng

Điều này là do thuật toán được đảm bảo ổn định và ba trong số chúng có cùng giá trị trung gian [khóa] trong quá trình sắp xếp [độ dài của chúng là 2, vì vậy khóa của chúng là 2]

💡 Mẹo. Điều tương tự cũng xảy ra với

>>> e = ["Emma", "emily", "Amy", "Jason"]
>>> e.sort[]
>>> e
['Amy', 'Emma', 'Jason', 'emily']
9 và
>>> class Client:
	def __init__[self, age]:
		self.age = age
0 [độ dài 1] và
>>> class Client:
	def __init__[self, age]:
		self.age = age
1 và
>>> class Client:
	def __init__[self, age]:
		self.age = age
2 [độ dài 3], thứ tự ban đầu của chúng so với nhau được giữ nguyên

Bây giờ bạn đã biết phương pháp

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 hoạt động như thế nào, vậy hãy đi sâu vào tìm hiểu về đột biến và cách nó có thể ảnh hưởng đến chương trình của bạn

🔹 Đột biến và Rủi ro

Như đã hứa, chúng ta hãy xem quá trình đột biến hoạt động như thế nào ở hậu trường

Khi bạn xác định một danh sách trong Python, như thế này

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
3

Bạn tạo một đối tượng tại một vị trí bộ nhớ cụ thể. Vị trí này được gọi là "địa chỉ bộ nhớ" của đối tượng, được biểu thị bằng một số nguyên duy nhất gọi là id

Bạn có thể coi id là một "thẻ" được sử dụng để xác định một vị trí cụ thể trong bộ nhớ

Bạn có thể truy cập id danh sách bằng cách sử dụng hàm ________ 48 _______4, chuyển danh sách dưới dạng đối số

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
4

Khi bạn thay đổi danh sách, bạn thay đổi nó trực tiếp trong bộ nhớ. Bạn có thể hỏi, tại sao điều này rất rủi ro?

Điều này rất nguy hiểm vì nó ảnh hưởng đến từng dòng mã sử dụng danh sách sau khi thay đổi, vì vậy bạn có thể đang viết mã để làm việc với một danh sách hoàn toàn khác với danh sách thực tồn tại trong bộ nhớ sau khi thay đổi

Đây là lý do tại sao bạn cần phải rất cẩn thận với các phương pháp gây đột biến

Đặc biệt, phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 thay đổi danh sách. Đây là một ví dụ về tác dụng của nó

Đây là một ví dụ

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
5

Danh sách đã bị thay đổi sau khi gọi

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[reverse=True]
>>> b
[9, 8, 7, 6, 3, 3, 2]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[reverse=True]
>>> c
['Z', 'U', 'T', 'D', 'A']
2

Mỗi dòng mã hoạt động với danh sách

>>> class Client:
	def __init__[self, age]:
		self.age = age
7 sau khi đột biến xảy ra sẽ sử dụng phiên bản mới, được sắp xếp của danh sách. Nếu đây không phải là điều bạn dự định, bạn có thể không nhận ra rằng các phần khác trong chương trình của bạn đang hoạt động với phiên bản mới của danh sách

Đây là một ví dụ khác về rủi ro đột biến trong một chức năng

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
6

Danh sách

>>> class Client:
	def __init__[self, age]:
		self.age = age
7 đã được chuyển dưới dạng đối số đã bị thay đổi, ngay cả khi đó không phải là điều bạn dự định khi viết hàm ban đầu

💡 Mẹo. Nếu một chức năng thay đổi một đối số, nó phải được nêu rõ ràng để tránh đưa lỗi vào các phần khác của chương trình của bạn

🔸 Tóm tắt Phương thức sort[]

  • Phương thức
    # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[]
    >>> b
    [2, 3, 3, 6, 7, 8, 9]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[]
    >>> c
    ['A', 'D', 'T', 'U', 'Z']
    
    7 cho phép bạn sắp xếp danh sách theo thứ tự tăng dần hoặc giảm dần
  • Phải mất hai đối số chỉ từ khóa.
    >>> d = ["aaa", "bb", "c"]
    >>> d.sort[key=len]
    >>> d
    ['c', 'bb', 'aaa']
    9 và
    # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[reverse=True]
    >>> b
    [9, 8, 7, 6, 3, 3, 2]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[reverse=True]
    >>> c
    ['Z', 'U', 'T', 'D', 'A']
    9
  • # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[reverse=True]
    >>> b
    [9, 8, 7, 6, 3, 3, 2]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[reverse=True]
    >>> c
    ['Z', 'U', 'T', 'D', 'A']
    9 xác định xem danh sách được sắp xếp theo thứ tự tăng dần hay giảm dần
  • >>> d = ["aaa", "bb", "c"]
    >>> d.sort[key=len]
    >>> d
    ['c', 'bb', 'aaa']
    9 là một hàm tạo ra một giá trị trung gian cho từng phần tử và giá trị này được sử dụng để so sánh trong quá trình sắp xếp
  • Phương thức
    # List of Integers
    >>> b = [6, 3, 8, 2, 7, 3, 9]
    >>> b.sort[]
    >>> b
    [2, 3, 3, 6, 7, 8, 9]
    
    # List of Strings
    >>> c = ["A", "Z", "D", "T", "U"]
    >>> c.sort[]
    >>> c
    ['A', 'D', 'T', 'U', 'Z']
    
    7 thay đổi danh sách, gây ra những thay đổi vĩnh viễn. Bạn cần phải rất cẩn thận và chỉ sử dụng nó nếu bạn không cần phiên bản gốc của danh sách

Tôi thực sự hy vọng rằng bạn thích bài viết của tôi và thấy nó hữu ích. Bây giờ bạn có thể làm việc với phương thức

# List of Integers
>>> b = [6, 3, 8, 2, 7, 3, 9]
>>> b.sort[]
>>> b
[2, 3, 3, 6, 7, 8, 9]

# List of Strings
>>> c = ["A", "Z", "D", "T", "U"]
>>> c.sort[]
>>> c
['A', 'D', 'T', 'U', 'Z']
7 trong các dự án Python của mình. Kiểm tra các khóa học trực tuyến của tôi. Theo dõi tôi trên Twitter. ⭐️

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

Estefania Cassingena Navone

Nhà phát triển, nhà văn kỹ thuật và người tạo nội dung @freeCodeCamp. Tôi chạy freeCodeCamp. org Kênh YouTube Español

Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Bạn có thể sử dụng sort[] trên một mảng không?

Lệnh sort[] sắp xếp các phần tử của mảng . sort[] ghi đè lên mảng ban đầu. Hàm sort[] sắp xếp các phần tử dưới dạng chuỗi theo thứ tự bảng chữ cái và tăng dần.

Sắp xếp nào được sử dụng cho mảng?

Sắp xếp lựa chọn . Trong mỗi lần lặp lại của sắp xếp lựa chọn, phần tử nhỏ nhất [xét theo thứ tự tăng dần] từ mảng con chưa sắp xếp được chọn và chuyển sang mảng con đã sắp xếp.

Chủ Đề