Python thay thế tất cả các ký tự trong chuỗi

Với chuỗi đầu vào là

python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
2 và thay thế & -> \& và # -> \#, cách nhanh nhất là xâu chuỗi các thay thế lại với nhau như thế này.
python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
3

Thời gian cho từng chức năng

  • a] 1000000 vòng lặp, tốt nhất là 3. 1. 47 μs mỗi vòng lặp
  • b] 1000000 vòng, tốt nhất là 3. 1. 51 μs mỗi vòng lặp
  • c] 100000 vòng, tốt nhất là 3. 12. 3 μs mỗi vòng lặp
  • d] 100000 vòng, tốt nhất là 3. 12 μs mỗi vòng lặp
  • e] 100000 vòng, tốt nhất là 3. 3. 27 μs mỗi vòng lặp
  • f] 1000000 vòng lặp, tốt nhất là 3. 0. 817 μs mỗi vòng lặp
  • g] 100000 vòng lặp, tốt nhất là 3. 3. 64 μs mỗi vòng lặp
  • h] 1000000 vòng lặp, tốt nhất là 3. 0. 927 μs trên mỗi vòng lặp
  • i] 1000000 vòng lặp, tốt nhất là 3. 0. 814 μs mỗi vòng lặp

Dưới đây là các chức năng

def a[text]:
    chars = "&#"
    for c in chars:
        text = text.replace[c, "\\" + c]


def b[text]:
    for ch in ['&','#']:
        if ch in text:
            text = text.replace[ch,"\\"+ch]


import re
def c[text]:
    rx = re.compile['[[&#]]']
    text = rx.sub[r'\\\1', text]


RX = re.compile['[[&#]]']
def d[text]:
    text = RX.sub[r'\\\1', text]


def mk_esc[esc_chars]:
    return lambda s: ''.join[['\\' + c if c in esc_chars else c for c in s]]
esc = mk_esc['&#']
def e[text]:
    esc[text]


def f[text]:
    text = text.replace['&', '\&'].replace['#', '\#']


def g[text]:
    replacements = {"&": "\&", "#": "\#"}
    text = "".join[[replacements.get[c, c] for c in text]]


def h[text]:
    text = text.replace['&', r'\&']
    text = text.replace['#', r'\#']


def i[text]:
    text = text.replace['&', r'\&'].replace['#', r'\#']

Hẹn giờ như thế này

python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"

Đây là mã tương tự để làm điều tương tự nhưng có nhiều ký tự hơn để thoát [\`*_{}>#+-. $]

def a[text]:
    chars = "\\`*_{}[][]>#+-.!$"
    for c in chars:
        text = text.replace[c, "\\" + c]


def b[text]:
    for ch in ['\\','`','*','_','{','}','[',']','[',']','>','#','+','-','.','!','$','\'']:
        if ch in text:
            text = text.replace[ch,"\\"+ch]


import re
def c[text]:
    rx = re.compile['[[&#]]']
    text = rx.sub[r'\\\1', text]


RX = re.compile['[[\\`*_{}[][]>#+-.!$]]']
def d[text]:
    text = RX.sub[r'\\\1', text]


def mk_esc[esc_chars]:
    return lambda s: ''.join[['\\' + c if c in esc_chars else c for c in s]]
esc = mk_esc['\\`*_{}[][]>#+-.!$']
def e[text]:
    esc[text]


def f[text]:
    text = text.replace['\\', '\\\\'].replace['`', '\`'].replace['*', '\*'].replace['_', '\_'].replace['{', '\{'].replace['}', '\}'].replace['[', '\['].replace[']', '\]'].replace['[', '\['].replace[']', '\]'].replace['>', '\>'].replace['#', '\#'].replace['+', '\+'].replace['-', '\-'].replace['.', '\.'].replace['!', '\!'].replace['$', '\$']


def g[text]:
    replacements = {
        "\\": "\\\\",
        "`": "\`",
        "*": "\*",
        "_": "\_",
        "{": "\{",
        "}": "\}",
        "[": "\[",
        "]": "\]",
        "[": "\[",
        "]": "\]",
        ">": "\>",
        "#": "\#",
        "+": "\+",
        "-": "\-",
        ".": "\.",
        "!": "\!",
        "$": "\$",
    }
    text = "".join[[replacements.get[c, c] for c in text]]


def h[text]:
    text = text.replace['\\', r'\\']
    text = text.replace['`', r'\`']
    text = text.replace['*', r'\*']
    text = text.replace['_', r'\_']
    text = text.replace['{', r'\{']
    text = text.replace['}', r'\}']
    text = text.replace['[', r'\[']
    text = text.replace[']', r'\]']
    text = text.replace['[', r'\[']
    text = text.replace[']', r'\]']
    text = text.replace['>', r'\>']
    text = text.replace['#', r'\#']
    text = text.replace['+', r'\+']
    text = text.replace['-', r'\-']
    text = text.replace['.', r'\.']
    text = text.replace['!', r'\!']
    text = text.replace['$', r'\$']


def i[text]:
    text = text.replace['\\', r'\\'].replace['`', r'\`'].replace['*', r'\*'].replace['_', r'\_'].replace['{', r'\{'].replace['}', r'\}'].replace['[', r'\['].replace[']', r'\]'].replace['[', r'\['].replace[']', r'\]'].replace['>', r'\>'].replace['#', r'\#'].replace['+', r'\+'].replace['-', r'\-'].replace['.', r'\.'].replace['!', r'\!'].replace['$', r'\$']

Đây là kết quả cho cùng một chuỗi đầu vào

python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
2

  • a] 100000 vòng lặp, tốt nhất là 3. 6. 72 μs mỗi vòng lặp
  • b] 100000 vòng, tốt nhất là 3. 2. 64 μs mỗi vòng lặp
  • c] 100000 vòng, tốt nhất là 3. 11. 9 μs mỗi vòng lặp
  • d] 100000 vòng, tốt nhất là 3. 4. 92 μs mỗi vòng lặp
  • e] 100000 vòng, tốt nhất là 3. 2. 96 μs mỗi vòng lặp
  • f] 100000 vòng lặp, tốt nhất là 3. 4. 29 μs mỗi vòng lặp
  • g] 100000 vòng lặp, tốt nhất là 3. 4. 68 μs mỗi vòng lặp
  • h] 100000 vòng lặp, tốt nhất là 3. 4. 73 μs mỗi vòng lặp
  • i] 100000 vòng, tốt nhất là 3. 4. 24 μs mỗi vòng lặp

Và với chuỗi đầu vào dài hơn [

python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
5]

  • a] 100000 vòng lặp, tốt nhất là 3. 7. 59 μs mỗi vòng lặp
  • b] 100000 vòng, tốt nhất là 3. 6. 54 μs trên mỗi vòng lặp
  • c] 100000 vòng, tốt nhất là 3. 16. 9 μs mỗi vòng lặp
  • d] 100000 vòng, tốt nhất là 3. 7. 29 μs mỗi vòng lặp
  • e] 100000 vòng, tốt nhất là 3. 12. 2 μs mỗi vòng lặp
  • f] 100000 vòng lặp, tốt nhất là 3. 5. 38 μs mỗi vòng lặp
  • g] 10000 vòng lặp, tốt nhất là 3. 21. 7 μs mỗi vòng lặp
  • h] 100000 vòng lặp, tốt nhất là 3. 5. 7 μs mỗi vòng lặp
  • i] 100000 vòng lặp, tốt nhất là 3. 5. 13 μs mỗi vòng lặp

Thêm một vài biến thể

def ab[text]:
    for ch in ['\\','`','*','_','{','}','[',']','[',']','>','#','+','-','.','!','$','\'']:
        text = text.replace[ch,"\\"+ch]


def ba[text]:
    chars = "\\`*_{}[][]>#+-.!$"
    for c in chars:
        if c in text:
            text = text.replace[c, "\\" + c]

Với đầu vào ngắn hơn

  • ab] 100000 vòng, tốt nhất là 3. 7. 05 μs mỗi vòng lặp
  • ba] 100000 vòng lặp, tốt nhất là 3. 2. 4 μs mỗi vòng lặp

Với đầu vào dài hơn

  • ab] 100000 vòng, tốt nhất là 3. 7. 71 μs mỗi vòng lặp
  • ba] 100000 vòng lặp, tốt nhất là 3. 6. 08 μs mỗi vòng lặp

Vì vậy, tôi sẽ sử dụng

python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
0 để dễ đọc và tốc độ

Được thúc đẩy bởi các mẹo trong phần nhận xét, một điểm khác biệt giữa

python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
1 và
python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
0 là kiểm tra
python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
3. Hãy thử nghiệm chúng với hai biến thể nữa

________số 8

Thời gian tính bằng μs trên mỗi vòng lặp trên Python 2. 7. 14 và 3. 6. 3 và trên một máy khác với bộ trước đó, vì vậy không thể so sánh trực tiếp

╭────────────╥──────┬───────────────┬──────┬──────────────────╮
│ Py, input  ║  ab  │ ab_with_check │  ba  │ ba_without_check │
╞════════════╬══════╪═══════════════╪══════╪══════════════════╡
│ Py2, short ║ 8.81 │    4.22       │ 3.45 │    8.01          │
│ Py3, short ║ 5.54 │    1.34       │ 1.46 │    5.34          │
├────────────╫──────┼───────────────┼──────┼──────────────────┤
│ Py2, long  ║ 9.3  │    7.15       │ 6.85 │    8.55          │
│ Py3, long  ║ 7.43 │    4.38       │ 4.41 │    7.02          │
└────────────╨──────┴───────────────┴──────┴──────────────────┘

Chúng ta có thể kết luận rằng

  • Những người có séc nhanh hơn tới 4 lần so với những người không có séc

  • python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
    
    4 dẫn đầu một chút về Python 3, nhưng
    python -mtimeit -s"import time_functions" "time_functions.a['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.b['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.c['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.d['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.e['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.f['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.g['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.h['abc&def#ghi']"
    python -mtimeit -s"import time_functions" "time_functions.i['abc&def#ghi']"
    
    0 [có kiểm tra] dẫn đầu nhiều hơn về Python 2

  • Tuy nhiên, bài học lớn nhất ở đây là Python 3 nhanh hơn Python 2 tới 3 lần. Không có sự khác biệt lớn giữa chậm nhất trên Python 3 và nhanh nhất trên Python 2

Chủ Đề