Đảo ngược tại chỗ python

Trong các bài viết trước, bạn có thể đã học cách đọc ngược một danh sách trong Python, khá thú vị. Bạn có thể kiểm tra điều này tại đây. Tuy nhiên, động cơ của hướng dẫn này là khá khác nhau. Chúng tôi sẽ không đọc một danh sách ngược lại nhưng chúng tôi sẽ thay đổi một danh sách hiện có thành danh sách đảo ngược của nó. Lưu ý rằng đây là một cách tiếp cận ngôn ngữ bất khả tri

Hãy xem một ví dụ

alist = [1,2,3,4,5,6,7]

print[alist[::-1]] #prints [7,6,5,4,3,2,1]

print[alist] #prints [1,2,3,4,5,6,7]

Vì vậy, bạn chỉ đang đọc alist theo thứ tự ngược lại khi bạn làm alist[::-1] . What we want to achieve is to make alist = [7,6,5,4,3,2,1].

Làm thế nào để thực hiện điều này?

Ý tưởng đằng sau điều này là sử dụng hai con trỏ, trái phải. The left trỏ tới chỉ mục đầu tiên của danh sách và phải con trỏ trỏ đến chỉ mục cuối cùng của danh sách. Bây giờ chúng ta hoán đổi các phần tử được trỏ tới bởi các con trỏ này. Sau đó, chúng tôi di chuyển con trỏ đến các chỉ số tiếp theo. Điều kiện kết thúc của điều này sẽ là khi con trỏ trái bằng hoặc chéo trên phải con trỏ. Hãy cho chúng tôi thấy điều này bằng cách sử dụng một ví dụ.

Vòngalisttráiphảidanh sách sau khi hoán đổi1[1,2,3,4,5,6,7]1 [0]7 [6][7,2,3,4,5,6,1]2[7,2,3,4,5,6,1]2[1]6[5][7,6,3,4,5,2,1]3 [7,2,3,4,5,6,1]3[2]5[4] [7,6,5,4,3,2,1]4[7,6,5,4,3,2,1]4[3]4[3]Dừng lại từ trái == phải


Như bạn có thể thấy, bây giờ danh sách đã bị đảo ngược

thuật toán

  1. left con trỏ trỏ đến chỉ mục đầu tiên và right con trỏ trỏ đến chỉ mục cuối cùng
  2. Hoán đổi các phần tử được trỏ bởi trái phải con trỏ tương ứng
  3. Tăng con trỏ trái lên 1 và giảm con trỏ phải con trỏ bằng 1
  4. Kiểm tra nếu left>= right.
    1. Nếu không, hãy lặp lại các bước 2-4
    2. Nếu có, dừng lại. Việc đảo ngược danh sách đã hoàn tất

Ghi chú. Mặc dù thuật toán này được giải thích cho danh sách nhưng bạn cũng có thể sử dụng thuật toán này cho chuỗi. Trong trường hợp đó, bạn có thể phải chuyển đổi chuỗi thành một danh sách bằng cách đánh máy nó. Đừng quên xây dựng lại chuỗi từ định dạng danh sách. Điều này có thể được thực hiện bằng cách sử dụng một số lệnh định dạng như replace[].

Mã số

def reverse[alist]:

   #intializing pointers
   left = 0
   right = len[alist]-1

   #condition for termination
   while left>> mylist
[1, 2, 3, 4, 5]

>>> mylist[::-1]
[5, 4, 3, 2, 1]
1 bị trần trụi thay bị tấn công bị cấm vào danh sách bị cấm

>>> mylist = [1, 2, 3, 4, 5]
>>> mylist
[1, 2, 3, 4, 5]

>>> mylist.reverse[]
None

>>> mylist
[5, 4, 3, 2, 1]

Như bạn có thể thấy, cuộc gọi

>>> mylist
[1, 2, 3, 4, 5]

>>> mylist[::-1]
[5, 4, 3, 2, 1]
2 trả về
>>> mylist
[1, 2, 3, 4, 5]

>>> mylist[::-1]
[5, 4, 3, 2, 1]
3 nhưng lệnh cấm danh sách mục tiêu bắt đầu. Việc triển khai đã được thư viện Python lựa chọn cẩn thận

Phương pháp

>>> mylist
[1, 2, 3, 4, 5]

>>> mylist[::-1]
[5, 4, 3, 2, 1]
1 sửa đổi trình tự tại chỗ để tiết kiệm không gian khi đảo ngược một trình tự lớn. Để nhắc nhở người dùng rằng nó hoạt động theo tác dụng phụ, nó không trả về trình tự đảo ngược

Lựa chọn 2. Sử dụng "[. -1]” Thủ thuật cắt lát để đảo ngược danh sách Python

Danh sách có yên tính tiền thú vị là cắt lát. Trường hợp đặc biệt khi cắt danh sách bằng "[. -1]" sẽ bị đảo ngược

>>> mylist
[1, 2, 3, 4, 5]

>>> mylist[::-1]
[5, 4, 3, 2, 1]

Đảo ngược danh sách theo cách này sẽ tốn nhiều bộ nhớ hơn so với cách thứ nhất vì nó tạo ra một bản sao nông của danh sách trước. Tao ra yều nông copy nhật là chỉ có chứa bài trùng, kòn bản thân các phần tử trong danh sách thì không. Vì vậy, nếu một phần tử trong danh sách bị cấm trước, bản sao nông sẽ bị thay đổi

Tùy chọn số 3. Tạo một trình vòng lặp đảo ngược với chức năng tích hợp reversed[]

Pẹn thân reversed[] không ngược list ban đầu cũng không tạo bản. Thay vào đó, chúng tôi nhận được một trình vòng lặp đảo ngược mà từ đó chúng tôi có thể duyệt qua các phần tử của danh sách theo thứ tự ngược lại

>>> mylist = [1, 2, 3, 4, 5]
>>> for item in reversed[mylist]:
...     print[item]
5
4
3
2
1
>>> mylist
>>> [1, 2, 3, 4, 5]

Độ bên trên, nười ta đến đế qua các phần tử của danh sách theo đến động. Vì vậy, làm thế nào để bạn tạo một bản sao đảo ngược bản sao với chức năng reversed[]?

>>> mylist = [1, 2, 3, 4, 5]
>>> list[reversed[mylist]]
[5, 4, 3, 2, 1]

Đó là nó. Kết quả là một bản sao nông của danh sách

Tóm lược

Nếu bạn đang tự hỏi cách tốt nhất để đảo ngược danh sách trong Python là gì, câu trả lời của bạn sẽ là " Vẫn tổi". Theo cá nhân, tôi thích cách tập sối thị nhất và thứ ba

  • Phương nội list.reverse[] nhanh, rị rị. Nếu trong trường hợp của bạn, nếu bạn muốn đảo ngược danh sách của mình trước, vui lòng chọn phương pháp này

  • Nếu điều đó không được chấp nhận, vui lòng sử dụng reversed[]

Tôi không thích cắt danh sách. Cúpáp être nó khá khó trên. Tôi không sử dụng nó vì lý do này

Lưu ý rằng có nhiều cách khác để tiếp cận nó, chẳng hạn như tự thực hiện từ đầu, đảo ngược danh sách, sử dụng Python - những câu hỏi được hỏi trong cuộc phỏng vấn là gì, nhưng không thực sự là giải pháp cho lập trình Python trong thực tế. Đó là lý do tại sao tôi không đề cập đến nó trong hướng dẫn này

Chủ Đề