Hướng dẫn how do i reverse a string order in python? - làm cách nào để đảo ngược thứ tự chuỗi trong python?

Tìm hiểu làm thế nào để đảo ngược một chuỗi trong Python.

Không có chức năng tích hợp để đảo ngược một chuỗi trong Python.

Cách nhanh nhất [và dễ nhất?] Là sử dụng một lát cắt lùi, -1.

Thí dụ

Đảo ngược chuỗi "Hello World":

txt = "Hello World" [::-1] in [txt]
print[txt]

Hãy tự mình thử »

Ví dụ giải thích

Chúng tôi có một chuỗi, "Hello World", mà chúng tôi muốn đảo ngược:

Chuỗi để đảo ngược

txt = "Hello World" [::-1] in [txt]"Hello World"[::-1]
print[txt]

Tạo một lát bắt đầu ở cuối chuỗi và di chuyển về phía sau.

Trong ví dụ cụ thể này, câu lệnh SLICE [::-1] có nghĩa là bắt đầu ở cuối chuỗi và kết thúc ở vị trí 0, di chuyển với bước -1, tiêu cực, có nghĩa là một bước lùi.

Lát chuỗi

txt = "Hello World" [::-1] in [txt][::-1]
print[txt]

Tạo một lát bắt đầu ở cuối chuỗi và di chuyển về phía sau.

Trong ví dụ cụ thể này, câu lệnh SLICE [::-1] có nghĩa là bắt đầu ở cuối chuỗi và kết thúc ở vị trí 0, di chuyển với bước -1, tiêu cực, có nghĩa là một bước lùi.

Lát chuỗi

Bây giờ chúng ta có một chuỗi

list_comprehension  : min:   4.2μs, mean:   4.5μs, max:   31.7μs
reverse_func        : min:  75.4μs, mean:  76.6μs, max:  109.5μs
reverse_reduce      : min: 749.2μs, mean: 882.4μs, max: 2310.4μs
reverse_loop        : min: 469.7μs, mean: 577.2μs, max: 1227.6μs
1 có nội dung "Xin chào thế giới" ngược.
print[txt]

In chuỗi để chứng minh kết quả

In danh sách

Thí dụ

Đảo ngược chuỗi "Hello World":
  return x[::-1]

txt = "Hello World" [::-1] in [txt]

Hãy tự mình thử »

Hãy tự mình thử »

Ví dụ giải thích

Chúng tôi có một chuỗi, "Hello World", mà chúng tôi muốn đảo ngược:

In chuỗi để chứng minh kết quả

In danh sách
  return x[::-1]

txt = "Hello World" [::-1] in [txt]

Hãy tự mình thử »

Ví dụ giải thích

Lát chuỗi

In danh sách
  return x
[::-1]

txt = "Hello World" [::-1] in [txt]

Hãy tự mình thử »

Ví dụ giải thích

Chúng tôi có một chuỗi, "Hello World", mà chúng tôi muốn đảo ngược:

In danh sách
 
return x[::-1]

txt = "Hello World" [::-1] in [txt]

Hãy tự mình thử »

Ví dụ giải thích

Chúng tôi có một chuỗi, "Hello World", mà chúng tôi muốn đảo ngược:

Chuỗi để đảo ngược
  return x[::-1]
mytxt = my_function["I wonder how this text looks like backwards"]print[mytxt]

txt = "Hello World" [::-1] in [txt]

Tạo một lát bắt đầu ở cuối chuỗi và di chuyển về phía sau.

In danh sách
  return x[::-1]

txt = "Hello World" [::-1] in [txt]

print[mytxt]


Câu trả lời này dài hơn một chút và chứa 3 phần: điểm chuẩn của các giải pháp hiện có, tại sao hầu hết các giải pháp ở đây đều sai, giải pháp của tôi.Benchmarks of existing solutions, why most solutions here are wrong, my solution.

Các câu trả lời hiện có chỉ chính xác nếu các bộ điều chỉnh / cụm đồ họa Unicode bị bỏ qua. Tôi sẽ giải quyết điều đó sau, nhưng trước tiên hãy xem xét tốc độ của một số thuật toán đảo ngược:

list_comprehension  : min:   0.6μs, mean:   0.6μs, max:    2.2μs
reverse_func        : min:   1.9μs, mean:   2.0μs, max:    7.9μs
reverse_reduce      : min:   5.7μs, mean:   5.9μs, max:   10.2μs
reverse_loop        : min:   3.0μs, mean:   3.1μs, max:    6.8μs

list_comprehension  : min:   4.2μs, mean:   4.5μs, max:   31.7μs
reverse_func        : min:  75.4μs, mean:  76.6μs, max:  109.5μs
reverse_reduce      : min: 749.2μs, mean: 882.4μs, max: 2310.4μs
reverse_loop        : min: 469.7μs, mean: 577.2μs, max: 1227.6μs

Bạn có thể thấy rằng thời gian để hiểu danh sách [

list_comprehension  : min:   4.2μs, mean:   4.5μs, max:   31.7μs
reverse_func        : min:  75.4μs, mean:  76.6μs, max:  109.5μs
reverse_reduce      : min: 749.2μs, mean: 882.4μs, max: 2310.4μs
reverse_loop        : min: 469.7μs, mean: 577.2μs, max: 1227.6μs
2] trong mọi trường hợp cho đến nay thấp nhất [ngay cả sau khi sửa lỗi đánh máy của tôi].

Chuỗi đảo ngược

Nếu bạn thực sự muốn đảo ngược một chuỗi theo lẽ thường, nó sẽ phức tạp hơn. Ví dụ, lấy chuỗi sau [ngón tay màu nâu chỉ bên trái, ngón tay màu vàng chỉ lên]. Đó là hai biểu đồ, nhưng 3 điểm mã Unicode. Một cái bổ sung là một công cụ sửa đổi da.

example = "👈🏾👆"

Nhưng nếu bạn đảo ngược nó với bất kỳ phương pháp đã cho, bạn có được ngón tay màu nâu hướng lên, ngón tay màu vàng hướng sang trái. Lý do cho điều này là công cụ sửa đổi màu "nâu" vẫn ở giữa và được áp dụng cho bất cứ điều gì trước đó. Vì vậy chúng tôi có

  • U: ngón tay chỉ lên
  • M: Công cụ sửa đổi màu nâu
  • L: ngón tay chỉ trái

original: LMU                    👈🏾👆
reversed: UML [above solutions]  ☝🏾👈
reversed: ULM [correct reversal] 👆👈🏾

Các cụm đồ họa Unicode phức tạp hơn một chút so với chỉ các điểm mã sửa đổi. May mắn thay, có một thư viện để xử lý đồ thị:

>>> import grapheme
>>> g = grapheme.graphemes["👈🏾👆"]
>>> list[g]
['👈🏾', '👆']

và do đó câu trả lời đúng sẽ là

def reverse_graphemes[string]:
    g = list[grapheme.graphemes[string]]
    return ''.join[g[::-1]]

đó cũng là chậm nhất:

list_comprehension  : min:    0.5μs, mean:    0.5μs, max:    2.1μs
reverse_func        : min:   68.9μs, mean:   70.3μs, max:  111.4μs
reverse_reduce      : min:  742.7μs, mean:  810.1μs, max: 1821.9μs
reverse_loop        : min:  513.7μs, mean:  552.6μs, max: 1125.8μs
reverse_graphemes   : min: 3882.4μs, mean: 4130.9μs, max: 6416.2μs

Mật mã

#!/usr/bin/env python

import numpy as np
import random
import timeit
from functools import reduce
random.seed[0]


def main[]:
    longstring = ''.join[random.choices["ABCDEFGHIJKLM", k=2000]]
    functions = [[list_comprehension, 'list_comprehension', longstring],
                 [reverse_func, 'reverse_func', longstring],
                 [reverse_reduce, 'reverse_reduce', longstring],
                 [reverse_loop, 'reverse_loop', longstring]
                 ]
    duration_list = {}
    for func, name, params in functions:
        durations = timeit.repeat[lambda: func[params], repeat=100, number=3]
        duration_list[name] = list[np.array[durations] * 1000]
        print['{func:

Bài Viết Liên Quan

Chủ Đề