Đôi khi chúng tôi muốn loại bỏ tất cả các lần xuất hiện của một ký tự khỏi một chuỗi. Có hai cách phổ biến để đạt được điều này.
Python loại bỏ ký tự khỏi chuỗi
- Sử dụng hàm thay thế chuỗi []
- Sử dụng hàm dịch []
Python loại bỏ ký tự khỏi chuỗi bằng cách sử dụng thay thế []
Chúng ta có thể sử dụng hàm thay thế chuỗi [] để thay thế một ký tự bằng một ký tự mới. Nếu chúng tôi cung cấp một chuỗi trống làm đối số thứ hai, thì ký tự sẽ bị xóa khỏi chuỗi. Lưu ý rằng chuỗi là bất biến trong Python, vì vậy hàm này sẽ trả về một chuỗi mới và chuỗi ban đầu sẽ không thay đổi.
s = 'abc12321cba'
print[s.replace['a', '']]
Đầu ra:
s = 'abc12321cba'
print[s.translate[{ord['a']: None}]]
0Python loại bỏ ký tự khỏi chuỗi bằng cách sử dụng dịch []
Chức năng Python Chuỗi dịch [] Thay thế từng ký tự trong chuỗi bằng bảng dịch đã cho. Chúng tôi phải chỉ định điểm mã Unicode cho ký tự và ‘không có cách thay thế để xóa nó khỏi chuỗi kết quả. Chúng ta có thể sử dụng hàm ord [] để có được điểm mã unicode của một ký tự.
s = 'abc12321cba'
print[s.translate[{ord['a']: None}]]
Đầu ra:
s = 'abc12321cba'
print[s.translate[{ord['a']: None}]]
0 Nếu bạn muốn thay thế nhiều ký tự, điều đó có thể được thực hiện dễ dàng bằng cách sử dụng trình lặp. Hãy cùng xem cách loại bỏ các ký tự ‘A,’ B, và ‘C, khỏi một chuỗi.s = 'abc12321cba'
print[s.translate[{ord[i]: None for i in 'abc'}]]
Đầu ra:
s = 'abc12321cba'
print[s.translate[{ord['a']: None}]]
2Loại bỏ khoảng trắng khỏi chuỗi
s = ' 1 2 3 4 '
print[s.replace[' ', '']] # 1234
print[s.translate[{ord[i]: None for i in ' '}]] # 1234
Python loại bỏ dòng mới khỏi chuỗi
s = 'ab\ncd\nef'
print[s.replace['\n', '']]
print[s.translate[{ord['\n']: None}]]
Xóa con khỏi chuỗi
Chuỗi thay thế [] đối số hàm là chuỗi. Hãy để xem cách loại bỏ một từ khỏi một chuỗi.
s = 'ab12abc34ba'
print[s.replace['ab', '']]
Đầu ra:
s = 'abc12321cba'
print[s.translate[{ord['a']: None}]]
3Xóa số lần được chỉ định
Chúng tôi cũng có thể vượt qua tham số thứ ba trong hàm thay thế [] để chỉ định số lần thay thế nên được thực hiện.
s = 'abababab'
print[s.replace['a', 'A', 2]]
Đầu ra:
s = 'abc12321cba'
print[s.translate[{ord['a']: None}]]
4Bạn có thể kiểm tra toàn bộ tập lệnh Python và nhiều ví dụ về Python từ Kho lưu trữ GitHub của chúng tôi.
Nếu bạn cần loại bỏ một số đầu của một chuỗi nếu nó tồn tại không làm gì cả. Giải pháp tốt nhất của tôi. Bạn có thể sẽ muốn sử dụng một trong 2 triển khai đầu tiên tuy nhiên tôi đã bao gồm lần thứ 3 để hoàn thiện.
Cho một hậu tố không đổi:
def remove_suffix[v, s]:
return v[:-len[s]] if v.endswith[s] else v
remove_suffix["abc.com", ".com"] == 'abc'
remove_suffix["abc", ".com"] == 'abc'
Cho một regex:
def remove_suffix_compile[suffix_pattern]:
r = re.compile[f"[.*?][{suffix_pattern}]?$"]
return lambda v: r.match[v][1]
remove_domain = remove_suffix_compile[r"\.[a-zA-Z0-9]{3,}"]
remove_domain["abc.com"] == "abc"
remove_domain["sub.abc.net"] == "sub.abc"
remove_domain["abc."] == "abc."
remove_domain["abc"] == "abc"
Đối với một bộ sưu tập các hậu tố không đổi, cách nhanh nhất không có triệu chứng cho một số lượng lớn các cuộc gọi:
def remove_suffix_preprocess[*suffixes]:
suffixes = set[suffixes]
try:
suffixes.remove['']
except KeyError:
pass
def helper[suffixes, pos]:
if len[suffixes] == 1:
suf = suffixes[0]
l = -len[suf]
ls = slice[0, l]
return lambda v: v[ls] if v.endswith[suf] else v
si = iter[suffixes]
ml = len[next[si]]
exact = False
for suf in si:
l = len[suf]
if -l == pos:
exact = True
else:
ml = min[len[suf], ml]
ml = -ml
suffix_dict = {}
for suf in suffixes:
sub = suf[ml:pos]
if sub in suffix_dict:
suffix_dict[sub].append[suf]
else:
suffix_dict[sub] = [suf]
if exact:
del suffix_dict['']
for key in suffix_dict:
suffix_dict[key] = helper[[s[:pos] for s in suffix_dict[key]], None]
return lambda v: suffix_dict.get[v[ml:pos], lambda v: v][v[:pos]]
else:
for key in suffix_dict:
suffix_dict[key] = helper[suffix_dict[key], ml]
return lambda v: suffix_dict.get[v[ml:pos], lambda v: v][v]
return helper[tuple[suffixes], None]
domain_remove = remove_suffix_preprocess[".com", ".net", ".edu", ".uk", '.tv', '.co.uk', '.org.uk']
Cái cuối cùng có lẽ nhanh hơn đáng kể trong pypy sau đó là CPython. Biến thể Regex có khả năng nhanh hơn điều này đối với hầu như tất cả các trường hợp không liên quan đến các từ điển khổng lồ của các hậu tố tiềm năng không thể dễ dàng được biểu diễn dưới dạng regex ít nhất là trong Cpython.
Trong PYPY, biến thể Regex gần như chắc chắn chậm hơn đối với số lượng lớn các cuộc gọi hoặc chuỗi dài ngay cả khi mô -đun RE sử dụng động cơ Regex biên dịch DFA làm phần lớn chi phí của Lambda sẽ được JIT tối ưu hóa.
Tuy nhiên, trong Cpython, thực tế là mã C chạy của bạn cho Regex so sánh gần như chắc chắn vượt xa các lợi thế thuật toán của phiên bản thu thập hậu tố trong hầu hết các trường hợp.
Chỉnh sửa: //m.xkcd.com/859/