Hướng dẫn is python list sorted by default? - danh sách python có được sắp xếp theo mặc định không?

Nói tóm lại, vâng, đơn đặt hàng được bảo tồn. Dài:

Nói chung, các định nghĩa sau sẽ luôn áp dụng cho các đối tượng như danh sách:

Danh sách là một tập hợp các yếu tố có thể chứa các yếu tố trùng lặp và có một thứ tự xác định thường không thay đổi trừ khi được thực hiện rõ ràng để làm như vậy. Các ngăn xếp và hàng đợi là cả hai loại danh sách cung cấp hành vi cụ thể (thường bị hạn chế) để thêm và loại bỏ các yếu tố (ngăn xếp là LIFO, hàng đợi là FIFO). Danh sách là những đại diện thực tế của, tốt, danh sách các thứ. Một chuỗi có thể được coi là một danh sách các ký tự, vì thứ tự rất quan trọng (

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
3) và các bản sao trong nội dung của chuỗi chắc chắn được cho phép (
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
4 có thể tồn tại và
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
5).list is a collection of elements that can contain duplicate elements and has a defined order that generally does not change unless explicitly made to do so. stacks and queues are both types of lists that provide specific (often limited) behavior for adding and removing elements (stacks being LIFO, queues being FIFO). Lists are practical representations of, well, lists of things. A string can be thought of as a list of characters, as the order is important (
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
3) and duplicates in the content of the string are certainly permitted (
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
4 can exist and
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
5).

Một bộ là một tập hợp các yếu tố không thể chứa các bản sao và có thứ tự không xác định có thể hoặc không thể thay đổi theo thời gian. Các bộ không đại diện cho danh sách những thứ rất nhiều vì chúng mô tả mức độ của một lựa chọn nhất định. Cấu trúc bên trong của tập hợp, cách các yếu tố của nó được lưu trữ so với nhau, thường không có nghĩa là truyền đạt thông tin hữu ích. Trong một số triển khai, các bộ luôn được sắp xếp bên trong; Trong các thứ tự khác, đơn giản là không xác định (thường tùy thuộc vào hàm băm).set is a collection of elements that cannot contain duplicates and has a non-definite order that may or may not change over time. Sets do not represent lists of things so much as they describe the extent of a certain selection of things. The internal structure of set, how its elements are stored relative to each other, is usually not meant to convey useful information. In some implementations, sets are always internally sorted; in others the ordering is simply undefined (usually depending on a hash function).

Bộ sưu tập là một thuật ngữ chung đề cập đến bất kỳ đối tượng nào được sử dụng để lưu trữ một số lượng (thường là biến) của các đối tượng khác. Cả hai danh sách và bộ là một loại bộ sưu tập. Tuples và mảng thường không được coi là bộ sưu tập. Một số ngôn ngữ coi bản đồ (các container mô tả mối liên hệ giữa các đối tượng khác nhau) cũng là một loại bộ sưu tập. is a generic term referring to any object used to store a (usually variable) number of other objects. Both lists and sets are a type of collection. Tuples and Arrays are normally not considered to be collections. Some languages consider maps (containers that describe associations between different objects) to be a type of collection as well.

Sơ đồ đặt tên này đúng với tất cả các ngôn ngữ lập trình mà tôi biết, bao gồm Python, C ++, Java, C#và Lisp (trong đó danh sách không giữ trật tự của họ sẽ đặc biệt thảm khốc). Nếu bất cứ ai biết về bất kỳ nơi nào đây không phải là trường hợp, xin vui lòng chỉ nói như vậy và tôi sẽ chỉnh sửa câu trả lời của tôi. Lưu ý rằng các triển khai cụ thể có thể sử dụng các tên khác cho các đối tượng này, chẳng hạn như vectơ trong C ++ và Flex trong Algol 68 (cả hai danh sách; Flex về mặt kỹ thuật chỉ là một mảng có thể tái định nghĩa).vector in C++ and flex in ALGOL 68 (both lists; flex is technically just a re-sizable array).

Nếu có bất kỳ sự nhầm lẫn nào còn lại trong trường hợp của bạn do các chi tiết cụ thể về cách thức hiệu suất

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
6 hoạt động ở đây, chỉ cần biết rằng đơn đặt hàng là quan trọng đối với các danh sách và trừ khi có lý do rất chính đáng để tin rằng bạn có thể luôn luôn cho rằng danh sách hoạt động đó gọi món. Trong trường hợp này, dấu hiệu
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
6 hoạt động giống như nó đối với các chuỗi (dù sao cũng chỉ là danh sách các ký tự): nó lấy nội dung của một danh sách và đặt nó đằng sau nội dung của người khác.

Nếu chúng ta có

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

sau đó

list1 + list2

Giống như

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]

Mà đánh giá

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Nhiều như

"abdcde" + "fghijk"

Sản xuất

"abdcdefghijk"

Tác giả

Andrew Dalke và Raymond Hettinger

Phóng thích

0.1

Danh sách Python có phương thức

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
8 tích hợp để sửa đổi danh sách tại chỗ. Ngoài ra còn có một chức năng tích hợp
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
9 xây dựng một danh sách được sắp xếp mới từ một điều đáng tin cậy.

Trong tài liệu này, chúng tôi khám phá các kỹ thuật khác nhau để sắp xếp dữ liệu bằng Python.

Sắp xếp những điều cơ bản

Một loại tăng dần đơn giản là rất dễ dàng: chỉ cần gọi hàm

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
9. Nó trả về một danh sách được sắp xếp mới:

>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]

Bạn cũng có thể sử dụng phương pháp

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
8. Nó sửa đổi danh sách tại chỗ (và trả về
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 để tránh nhầm lẫn). Thông thường, nó ít thuận tiện hơn
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
9 - nhưng nếu bạn không cần danh sách ban đầu, thì nó lại hiệu quả hơn một chút.

>>> a = [5, 2, 3, 1, 4]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]

Một điểm khác biệt khác là phương thức

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
8 chỉ được xác định cho danh sách. Ngược lại, hàm
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
9 chấp nhận bất kỳ điều gì có thể.

>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]

Chức năng chính¶

Cả

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
8 và
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
9 đều có tham số chính để chỉ định hàm (hoặc có thể gọi khác) để được gọi trên mỗi phần tử danh sách trước khi so sánh.

Ví dụ: ở đây, một so sánh chuỗi không nhạy cảm trường hợp:

>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

Giá trị của tham số khóa phải là một hàm (hoặc có thể gọi khác) có một đối số duy nhất và trả về một khóa để sử dụng cho mục đích sắp xếp. Kỹ thuật này nhanh vì hàm chính được gọi chính xác một lần cho mỗi bản ghi đầu vào.

Một mẫu phổ biến là sắp xếp các đối tượng phức tạp bằng cách sử dụng một số chỉ số đối tượng là các khóa. Ví dụ:

list1 + list2
0

Kỹ thuật tương tự hoạt động cho các đối tượng với các thuộc tính được đặt tên. Ví dụ:

list1 + list2
1

Chức năng mô -đun vận hành

Các mẫu chức năng khóa được hiển thị ở trên là rất phổ biến, do đó, Python cung cấp các chức năng tiện lợi để làm cho các chức năng của người truy cập dễ dàng và nhanh hơn. Mô -đun

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8 có hàm
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9,
"abdcde" + "fghijk"
0 và
"abdcde" + "fghijk"
1.

Sử dụng các chức năng đó, các ví dụ trên trở nên đơn giản và nhanh hơn:

list1 + list2
2

Các chức năng mô -đun toán tử cho phép nhiều cấp độ sắp xếp. Ví dụ, để sắp xếp theo cấp độ sau đó theo tuổi:

list1 + list2
3

Tăng dần và giảm dần¶

Cả

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
8 và
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
9 đều chấp nhận tham số ngược với giá trị boolean. Điều này được sử dụng để gắn cờ các loại giảm dần. Ví dụ: để lấy dữ liệu của học sinh theo thứ tự tuổi ngược:

list1 + list2
4

Sắp xếp sự ổn định và các loại phức tạp

Các loại được đảm bảo là ổn định. Điều đó có nghĩa là khi nhiều bản ghi có cùng một khóa, thứ tự ban đầu của chúng được bảo tồn.

list1 + list2
5

Lưu ý cách hai bản ghi cho Blue giữ lại thứ tự ban đầu của họ để

"abdcde" + "fghijk"
4 được đảm bảo trước
"abdcde" + "fghijk"
5.

Khách sạn tuyệt vời này cho phép bạn xây dựng các loại phức tạp trong một loạt các bước sắp xếp. Ví dụ, để sắp xếp dữ liệu học sinh bằng cấp giảm dần và sau đó tăng dần tuổi, hãy sắp xếp tuổi trước và sau đó sắp xếp lại bằng cấp:

list1 + list2
6

Điều này có thể được trừu tượng hóa thành một hàm trình bao bọc có thể lấy một danh sách và bộ dữ liệu của trường và đặt hàng để sắp xếp chúng trên nhiều đường chuyền.

list1 + list2
7

Thuật toán TIMSORT được sử dụng trong Python thực hiện nhiều loại hiệu quả vì nó có thể tận dụng bất kỳ thứ tự nào đã có trong bộ dữ liệu.

Trang trí-sort-undecignor¶

Idiom này được gọi là trang trí-dort-undeconation sau ba bước của nó:

  • Đầu tiên, danh sách ban đầu được trang trí với các giá trị mới kiểm soát thứ tự sắp xếp.

  • Thứ hai, danh sách trang trí được sắp xếp.

  • Cuối cùng, các trang trí được loại bỏ, tạo một danh sách chỉ chứa các giá trị ban đầu theo thứ tự mới.

Ví dụ, để sắp xếp dữ liệu của học sinh theo cấp bằng cách sử dụng phương pháp DSU:

list1 + list2
8

Thành ngữ này hoạt động vì các bộ dữ liệu được so sánh từ vựng; Các mục đầu tiên được so sánh; Nếu chúng giống nhau thì các mục thứ hai được so sánh, v.v.

Không cần thiết hoàn toàn cần thiết trong tất cả các trường hợp để đưa Chỉ số I vào danh sách được trang trí, nhưng bao gồm cả nó mang lại hai lợi ích:

  • Sắp xếp ổn định - nếu hai mục có cùng một khóa, đơn đặt hàng của chúng sẽ được bảo tồn trong danh sách được sắp xếp.

  • Các mặt hàng ban đầu không phải so sánh vì thứ tự của các bộ dữ liệu được trang trí sẽ được xác định nhiều nhất là hai mặt hàng đầu tiên. Vì vậy, ví dụ danh sách ban đầu có thể chứa các số phức tạp không thể được sắp xếp trực tiếp.

Một cái tên khác cho thành ngữ này là Schwartzian Transform, sau Randal L. Schwartz, người đã phổ biến nó trong số các lập trình viên Perl.

Bây giờ việc sắp xếp Python cung cấp các chức năng chính, kỹ thuật này không cần thiết.

Các chức năng so sánh

Không giống như các chức năng chính trả về giá trị tuyệt đối để sắp xếp, hàm so sánh tính toán thứ tự tương đối cho hai đầu vào.

Ví dụ, thang đo cân bằng so sánh hai mẫu cho một thứ tự tương đối: nhẹ hơn, bằng nhau hoặc nặng hơn. Tương tự như vậy, một hàm so sánh như

"abdcde" + "fghijk"
6 sẽ trả về giá trị âm cho ít hơn, 0 nếu các đầu vào bằng nhau hoặc giá trị dương cho lớn hơn.

Người ta thường gặp các hàm so sánh khi dịch thuật toán từ các ngôn ngữ khác. Ngoài ra, một số thư viện cung cấp các chức năng so sánh như là một phần của API của họ. Ví dụ,

"abdcde" + "fghijk"
7 là một hàm so sánh.

Để phù hợp với các tình huống đó, Python cung cấp

"abdcde" + "fghijk"
8 để bọc chức năng so sánh để làm cho nó có thể sử dụng được như một hàm chính:

list1 + list2
9

Vụn vặt¶

  • Để sắp xếp nhận thức địa phương, hãy sử dụng

    "abdcde" + "fghijk"
    
    9 cho chức năng chính hoặc
    "abdcde" + "fghijk"
    
    7 cho hàm so sánh. Điều này là cần thiết bởi vì các thứ tự sắp xếp theo thứ tự bảng chữ cái có thể thay đổi giữa các nền văn hóa ngay cả khi bảng chữ cái cơ bản là như nhau.

  • Tham số ngược vẫn duy trì sự ổn định sắp xếp (để các bản ghi có các khóa bằng nhau giữ lại thứ tự ban đầu). Thật thú vị, hiệu ứng đó có thể được mô phỏng mà không cần tham số bằng cách sử dụng hàm

    "abdcdefghijk"
    
    1 tích hợp hai lần:

    [0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
    
    0

  • Các thói quen sắp xếp sử dụng

    "abdcdefghijk"
    
    2 khi so sánh giữa hai đối tượng. Vì vậy, thật dễ dàng để thêm một thứ tự sắp xếp tiêu chuẩn vào một lớp bằng cách xác định phương thức
    "abdcdefghijk"
    
    3:

    [0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
    
    1

    Tuy nhiên, lưu ý rằng

    "abdcdefghijk"
    
    2 có thể quay trở lại bằng cách sử dụng
    "abdcdefghijk"
    
    5 nếu
    "abdcdefghijk"
    
    3 không được thực hiện (xem
    "abdcdefghijk"
    
    7).

  • Các chức năng chính không cần phải phụ thuộc trực tiếp vào các đối tượng được sắp xếp. Một chức năng chính cũng có thể truy cập các tài nguyên bên ngoài. Chẳng hạn, nếu các lớp học sinh được lưu trữ trong từ điển, chúng có thể được sử dụng để sắp xếp một danh sách riêng các tên sinh viên:

    [0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
    
    2

Danh sách Python có được sắp xếp không?

Chuỗi hàm python sort () được sắp xếp theo thứ tự bảng chữ cái và các số được sắp xếp bằng số.Lưu ý: Bạn không thể sắp xếp một danh sách chứa cả giá trị chuỗi và giá trị số.Strings are sorted alphabetically, and numbers are sorted numerically. Note: You cannot sort a list that contains BOTH string values AND numeric values.

Danh sách Python luôn được đặt hàng?

Bạn sẽ sử dụng những điều này rộng rãi trong chương trình Python của bạn.Một trong những đặc điểm chính của một danh sách là nó được đặt hàng.Thứ tự của các yếu tố trong danh sách là một thuộc tính nội tại của danh sách đó và không thay đổi, trừ khi bản thân danh sách được sửa đổi.One of the chief characteristics of a list is that it is ordered. The order of the elements in a list is an intrinsic property of that list and does not change, unless the list itself is modified.

Các bộ Python có tự động được sắp xếp không?

Có, các bộ hoàn toàn không được đặt hàng.Bạn có thể xem xét sử dụng các bộ sưu tập.Đặt hàng là một "tập hợp được đặt hàng", ghi nhớ thứ tự trong đó các phần tử được chèn khi bạn lặp lại nó.. You can consider using collections. OrderedDict as an "ordered set", which remembers the order in which the elements are inserted when you iterate over it.

Sắp xếp trong Python thay đổi danh sách?

Phương thức sort () là một phương thức danh sách sửa đổi danh sách tại chỗ và không trả về không.Nói cách khác, phương thức sort () sửa đổi hoặc thay đổi danh sách mà nó được gọi và không tạo một danh sách mới.the sort() method modifies or changes the list it is called on, and does not create a new list.