Sắp xếp danh sách lớp python

Một số lần chúng tôi sử dụng danh sách 2-D hoặc danh sách danh sách trong chương trình của mình để biểu diễn bảng hoặc ma trận. Khi các bảng này cần được sắp xếp theo giá trị nào đó, chúng ta cần sắp xếp toàn bộ danh sách các danh sách. Trong bài viết này, chúng ta sẽ thảo luận về các cách tiếp cận khác nhau để sắp xếp danh sách các danh sách trong python

Sắp xếp danh sách các danh sách bằng phương thức sort[] trong Python

Thông thường, phương thức sort[] được sử dụng để sắp xếp danh sách 1-D. Khi được gọi trên một danh sách, nó sắp xếp các phần tử của danh sách theo thứ tự tăng dần như sau

1

2

3

4

5

6

myList = [1, 2, 5, 3, 77, 12, 104, 34]

in["Danh sách đầu vào là. ",Danh sách của tôi]

danh sách của tôi. sắp xếp[]

in["Danh sách đã sắp xếp là. ",Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [1, 2, 5, 3, 77, 12, 104, 34]

Danh sách được sắp xếp . [1, 2, 3, 5, 12, 34, 77, 104]

Nếu chúng ta có một danh sách các danh sách và chúng ta gọi phương thức sort[] trong danh sách, nó sẽ sắp xếp lại vị trí của các danh sách bên trong theo phần tử đầu tiên của chúng. tôi. e. Danh sách bên trong có phần tử đầu tiên nhỏ nhất sẽ ở vị trí đầu tiên và danh sách bên trong có phần tử đầu tiên lớn nhất sẽ ở vị trí cuối cùng

Nếu hai danh sách bên trong có cùng phần tử đầu tiên, vị trí của chúng được quyết định dựa trên phần tử thứ hai và danh sách bên trong có phần tử thứ hai nhỏ hơn sẽ xuất hiện trước. Bạn có thể quan sát kịch bản này trong ví dụ sau

1

2

3

4

5

6

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

danh sách của tôi. sắp xếp[]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[5, 3, 77], [12, 104, 34], [504, 1, 2, 12]]

Tuy nhiên, chúng ta cũng có thể quyết định các tiêu chí mà các danh sách bên trong sẽ được sắp xếp. Chúng ta có thể quyết định chỉ mục của phần tử trong các danh sách bên trong sẽ được sử dụng để so sánh các danh sách bên trong. Đối với điều này, chúng ta có thể sử dụng phương thức itemgetter[] hoặc hàm lambda. Hãy để chúng tôi thảo luận từng cái một

Sử dụng phương thức itemgetter[]

Phương thức itemgetter[] được định nghĩa trong mô-đun toán tử. Nó lấy một số n làm đối số đầu vào và trả về một đối tượng có thể gọi được [Để đơn giản, bạn có thể gọi nó là một hàm]. Chúng ta có thể sử dụng đối tượng có thể gọi được để lấy phần tử tại chỉ mục n từ bất kỳ danh sách nào

Hãy để chúng tôi hiểu điều này bằng cách sử dụng ví dụ sau

1

2

3

4

5

6

7

8

từ toán tử nhập itemgetter

get_n = itemgetter[3]

myList = [1, 2, 5, 3, 77, 12, 104, 34]

in["Danh sách đầu vào là. ", Danh sách của tôi]

print["Phần tử tại chỉ mục 3 là. ", get_n[myList]]

đầu ra

1

2

3

4

Danh sách đầu vào . [1, 2, 5, 3, 77, 12, 104, 34]

Phần tử tại chỉ mục 3 is: 3

Ở đây, trước tiên chúng ta đã tạo một đối tượng có thể gọi được và gán nó cho get_n bằng cách sử dụng phương thức itemgetter[]. Bạn có thể quan sát thấy rằng chúng ta đã truyền số 3 cho phương thức itemgetter[]. Do đó, bất cứ khi nào chúng ta chuyển một danh sách tới đối tượng get_n[] làm đối số đầu vào, nó sẽ trả về phần tử ở chỉ mục 3 như bạn có thể thấy ở đầu ra

Để sắp xếp một danh sách các danh sách bằng phương thức itemgetter[], chúng ta sẽ làm theo cách sau

Giả sử rằng chúng ta phải sắp xếp lại các danh sách bên trong dựa trên phần tử tại chỉ mục n

  • Đầu tiên, chúng ta sẽ tạo một đối tượng itemgetter get_n bằng phương thức itemgetter[]
  • Sau đó, chúng ta sẽ truyền đối tượng get_n cho phương thức sort[] làm khóa
  • Khi phương thức sort[] được thực thi bằng cách sử dụng get_n làm khóa, mỗi danh sách bên trong trước tiên được chuyển đến đối tượng get_n dưới dạng đối số đầu vào, sau đó trả về phần tử tại chỉ mục n. Phần tử này được sử dụng để so sánh các danh sách bên trong để sắp xếp danh sách các danh sách trong python

Chẳng hạn, chúng ta có thể sắp xếp danh sách các danh sách bằng cách sử dụng phần tử ở chỉ mục 2 của danh sách bên trong làm khóa như hình bên dưới

1

2

3

4

5

6

7

8

9

từ toán tử nhập itemgetter

get_n = itemgetter[2]

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

danh sách của tôi. sắp xếp[khóa=get_n]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[504, 1, 2, 12], [12, 104, 34], [5, 3, 77]]

Luôn nhớ rằng phải có ít nhất n+1 phần tử trong tất cả các danh sách bên trong. Mặt khác, một ngoại lệ IndexError sẽ xảy ra nếu phương thức get_n cố truy xuất một phần tử tại chỉ mục n của một danh sách bên trong có ít hơn n+1 phần tử

Bạn có thể quan sát điều này trong ví dụ sau

1

2

3

4

5

6

7

8

9

từ toán tử nhập itemgetter

get_n = itemgetter[4]

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

danh sách của tôi. sắp xếp[khóa=get_n]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

5

6

7

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Truy nguyên [hầu hết cuộc gọi gần đây last]:

Tệp "/home/aditya1117/PycharmProjects/pythonProject/string1. py", dòng 6, in

danh sách của tôi. sắp xếp[khóa=get_n]

Lỗi chỉ mục. danh sách chỉ mục ra của phạm vi

Sử dụng Hàm Lambda

Sử dụng phương thức itemgetter[], chúng ta chỉ có thể sử dụng các phần tử của danh sách bên trong làm khóa để so sánh danh sách bên trong. Giả sử rằng chúng tôi muốn sử dụng giá trị tuyệt đối của các phần tử thay vì các phần tử thực tế làm khóa để so sánh các danh sách bên trong. Trong trường hợp như vậy, chúng ta có thể sử dụng các hàm lambda

Các hàm lambda là các hàm một dòng có thể chấp nhận bất kỳ số lượng đối số nào nhưng chỉ có thể có một câu lệnh. Cú pháp của hàm lambda như sau

lambda [đối số]. biểu hiện

Nơi đây,

  • lambda là một từ khóa
  • đối số là các đối số đầu vào mà chúng ta muốn chuyển đến hàm lambda. Chúng tôi đã viết các đối số trong một danh sách để chỉ ra rằng có thể có nhiều hơn một đối số
  • biểu thức là biểu thức bao gồm các đối số đầu vào. Nó cũng có thể là một cuộc gọi chức năng

Để sắp xếp một danh sách các danh sách bằng hàm lambda, chúng ta sẽ tạo một hàm lambda và chuyển nó làm khóa cho phương thức thesort[]

Để sắp xếp danh sách các danh sách bằng cách sử dụng phần tử tại chỉ mục n của danh sách bên trong,

  • Chúng tôi sẽ chuyển các danh sách bên trong làm đối số đầu vào cho hàm lambda
  • Chúng ta sẽ sử dụng phần tử tại chỉ mục n của danh sách bên trong làm biểu thức trong hàm lambda

Bạn có thể quan sát toàn bộ quá trình trong ví dụ sau

1

2

3

4

5

6

7

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

danh sách của tôi. sắp xếp[phím=lambda . inner_list:inner_list[2]]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[504, 1, 2, 12], [12, 104, 34], [5, 3, 77]]

Ở đây, chúng tôi đã sắp xếp danh sách danh sách bằng hàm lambda bằng cách so sánh phần tử ở chỉ mục 2 của danh sách bên trong

Nếu bạn muốn sử dụng giá trị tuyệt đối của các phần tử trong danh sách bên trong để so sánh chúng, bạn có thể gọi hàm abs[] với phần tử của danh sách bên trong làm đối số đầu vào trong hàm lambda như sau

1

2

3

4

5

6

myList = [[504, -1, 2, 12], [5, 3, 77], [12, -104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

danh sách của tôi. sắp xếp[phím=lambda . inner_list: abs[inner_list[1]]]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, -1, 2, 12], [5, 3, 77], [12, -104, 34]]

Danh sách được sắp xếp . [[504, -1, 2, 12], [5, 3, 77], [12, -104, 34]]

đọc thêm

Python sắp xếp danh sách các bộ dữ liệu

Đọc thêm

Sắp xếp danh sách theo thứ tự abc trong Python

Đọc thêm

Sắp xếp danh sách các danh sách bằng hàm sorted[] trong Python

Trong khi sử dụng phương thức sort[], danh sách ban đầu được sửa đổi. Để tránh điều này, bạn có thể sử dụng hàm sorted[]. Hàm sorted[] lấy một danh sách làm đầu vào và trả về một danh sách mới với các phần tử của danh sách đầu vào theo thứ tự được sắp xếp như sau

1

2

3

4

5

6

myList = [1, 2, 5, 3, 77, 12, 104, 34]

in["Danh sách đầu vào là. ", Danh sách của tôi]

newList = đã sắp xếp[myList]

in["Danh sách đã sắp xếp là. ", Danh sách mới]

đầu ra

1

2

3

4

Danh sách đầu vào . [1, 2, 5, 3, 77, 12, 104, 34]

Danh sách được sắp xếp . [1, 2, 3, 5, 12, 34, 77, 104]

Để sắp xếp một danh sách các danh sách bằng hàm sorted[], chúng ta chỉ cần chuyển danh sách đầu vào cho hàm sorted như sau

1

2

3

4

5

6

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

newList=đã sắp xếp[myList]

in["Danh sách đã sắp xếp là. ", Danh sách mới]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[5, 3, 77], [12, 104, 34], [504, 1, 2, 12]]

Ở đây, bạn có thể thấy rằng các danh sách bên trong đã được sắp xếp theo đối số đầu tiên của chúng như đã được thực hiện trong trường hợp của phương thức sort[]

Chúng ta cũng có thể sử dụng phương thức itemgetter[] và hàm lambda để sắp xếp danh sách các danh sách bằng cách sử dụng một khóa được chỉ định như chúng ta đã làm với phương thức sort[]

Chúng ta có thể sử dụng phương thức itemgetter[] với hàm sorted[] để sắp xếp một danh sách các danh sách như hình bên dưới. Ở đây, cơ chế của phương thức itemgetter[] tương tự như cơ chế mà chúng ta đã thảo luận khi sử dụng nó với phương thức sort[]

1

2

3

4

5

6

7

8

9

từ toán tử nhập itemgetter

get_n = itemgetter[2]

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

newList = đã sắp xếp[myList, key=get_n]

in["Danh sách đã sắp xếp là. ", Danh sách mới]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[504, 1, 2, 12], [12, 104, 34], [5, 3, 77]]

Tương tự như phương thức itemgetter[], chúng ta có thể sử dụng hàm lambda với hàm sorted[] như sau

1

2

3

4

5

6

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

newList = đã sắp xếp[myList, key=lambda inner_list: inner_list[1]]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Sắp xếp danh sách các danh sách trên cơ sở độ dài của danh sách bên trong

Hàm len[] dùng để tính độ dài của một danh sách. Nó chấp nhận một danh sách làm đối số đầu vào và trả về độ dài của danh sách như sau

1

2

3

4

5

myList = [504, 1, 2, 12, 5, 3, 77, 12, 104, 34]

in["Danh sách đầu vào là. ", Danh sách của tôi]

print["Độ dài của danh sách là. ", len[myList]]

đầu ra

1

2

3

4

Danh sách đầu vào . [504, 1, 2, 12, 5, 3, 77, 12, 104, 34]

Cái độ dài của cái danh sách is: 10

Để sắp xếp một danh sách các danh sách theo độ dài của các danh sách bên trong, chúng ta sẽ sử dụng độ dài của các danh sách bên trong làm khóa để sắp xếp. Đối với điều này, chúng ta sẽ sử dụng hàm thelen[] làm khóa với phương thức sort[] như sau

1

2

3

4

5

6

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

danh sách của tôi. sắp xếp[phím=len]

in["Danh sách đã sắp xếp là. ", Danh sách của tôi]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[5, 3, 77], [12, 104, 34], [504, 1, 2, 12]]

Ngoài ra, chúng ta có thể sử dụng hàm sorted[] và hàm len[] để sắp xếp danh sách các danh sách theo độ dài của chúng mà vẫn giữ nguyên danh sách ban đầu như sau

1

2

3

4

5

6

myList = [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

in["Danh sách đầu vào là. ", Danh sách của tôi]

newList = đã sắp xếp[myList, key=len]

in["Danh sách đã sắp xếp là. ", Danh sách mới]

đầu ra

1

2

3

4

Danh sách đầu vào . [[504, 1, 2, 12], [5, 3, 77], [12, 104, 34]]

Danh sách được sắp xếp . [[5, 3, 77], [12, 104, 34], [504, 1, 2, 12]]

Sự kết luận

Trong bài viết này, chúng tôi đã thảo luận về các cách khác nhau để sắp xếp danh sách danh sách trong python. Bạn có thể sử dụng bất kỳ cách tiếp cận nào cho công việc của mình tùy theo nhu cầu của bạn. Nếu bạn không muốn sửa đổi danh sách ban đầu, bạn có thể sử dụng hàm sorted[]. Còn không thì bạn có thể sử dụng phương thức sort[] để sắp xếp danh sách list trong python

Chủ Đề