Hướng dẫn how do i remove two spaces in python? - làm cách nào để xóa hai khoảng trắng trong python?

Sử dụng regexes với "\ s" và thực hiện chuỗi đơn giản.split () cũng sẽ loại bỏ một khoảng trắng khác - như newlines, return car car, tab. Trừ khi điều này là mong muốn, chỉ làm nhiều không gian, tôi trình bày những ví dụ này.only do multiple spaces, I present these examples.

Tôi đã sử dụng 11 đoạn, 1000 từ, 6665 byte của Lorem Ipsum để có được các bài kiểm tra thời gian thực tế và sử dụng các không gian thêm độ dài ngẫu nhiên trong suốt:

original_string = ''.join(word + (' ' * random.randint(1, 10)) for word in lorem_ipsum.split(' '))

Một lớp lót về cơ bản sẽ thực hiện một dải của bất kỳ không gian hàng đầu/đường mòn nào, và nó bảo tồn một không gian hàng đầu/theo dõi (nhưng chỉ một ;-).

# setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' # while_replace_test new_string = original_string[:] new_string = while_replace(new_string) assert new_string != original_string # re_replace_test new_string = original_string[:] new_string = re_replace(new_string) assert new_string != original_string # proper_join_test new_string = original_string[:] new_string = proper_join(new_string) assert new_string != original_string

Lưu ý: "Phiên bản while" đã tạo ra một bản sao của original_string, như tôi tin rằng một khi đã được sửa đổi trong lần chạy đầu tiên, các lần chạy liên tiếp sẽ nhanh hơn (nếu chỉ một chút). Như điều này thêm thời gian, tôi đã thêm bản sao chuỗi này vào hai bản còn lại để thời gian chỉ hiển thị sự khác biệt trong logic. Hãy nhớ rằng ____10 chính trên các trường hợp # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 1 sẽ chỉ được thực thi một lần; Cách ban đầu tôi đã làm điều này, vòng lặp while hoạt động trên cùng một nhãn, original_string, do đó, lần chạy thứ hai, sẽ không có gì để làm. Cách nó được thiết lập ngay bây giờ, gọi một hàm, sử dụng hai nhãn khác nhau, đó không phải là vấn đề. Tôi đã thêm các tuyên bố # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 4 cho tất cả các công nhân để xác minh chúng tôi thay đổi một cái gì đó mỗi lần lặp (đối với những người có thể đáng ngờ). Ví dụ: thay đổi điều này và nó bị phá vỡ: The "while version" made a copy of the original_string, as I believe once modified on the first run, successive runs would be faster (if only by a bit). As this adds time, I added this string copy to the other two so that the times showed the difference only in the logic. Keep in mind that the main # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 0 on # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 1 instances will only be executed once; the original way I did this, the while loop worked on the same label, original_string, thus the second run, there would be nothing to do. The way it's set up now, calling a function, using two different labels, that isn't a problem. I've added # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 4 statements to all the workers to verify we change something every iteration (for those who may be dubious). E.g., change to this and it breaks:

# while_replace_test new_string = original_string[:] new_string = while_replace(new_string) assert new_string != original_string # will break the 2nd iteration while ' ' in original_string: original_string = original_string.replace(' ', ' ') Tests run on a laptop with an i5 processor running Windows 7 (64-bit). timeit.Timer(stmt = test, setup = setup).repeat(7, 1000) test_string = 'The fox jumped over\n\t the log.' # trivial Python 2.7.3, 32-bit, Windows test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.001066 | 0.001260 | 0.001128 | 0.001092 re_replace_test | 0.003074 | 0.003941 | 0.003357 | 0.003349 proper_join_test | 0.002783 | 0.004829 | 0.003554 | 0.003035 Python 2.7.3, 64-bit, Windows test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.001025 | 0.001079 | 0.001052 | 0.001051 re_replace_test | 0.003213 | 0.004512 | 0.003656 | 0.003504 proper_join_test | 0.002760 | 0.006361 | 0.004626 | 0.004600 Python 3.2.3, 32-bit, Windows test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.001350 | 0.002302 | 0.001639 | 0.001357 re_replace_test | 0.006797 | 0.008107 | 0.007319 | 0.007440 proper_join_test | 0.002863 | 0.003356 | 0.003026 | 0.002975 Python 3.3.3, 64-bit, Windows test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.001444 | 0.001490 | 0.001460 | 0.001459 re_replace_test | 0.011771 | 0.012598 | 0.012082 | 0.011910 proper_join_test | 0.003741 | 0.005933 | 0.004341 | 0.004009 test_string = lorem_ipsum # Thanks to //www.lipsum.com/ # "Generated 11 paragraphs, 1000 words, 6665 bytes of Lorem Ipsum" Python 2.7.3, 32-bit test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.342602 | 0.387803 | 0.359319 | 0.356284 re_replace_test | 0.337571 | 0.359821 | 0.348876 | 0.348006 proper_join_test | 0.381654 | 0.395349 | 0.388304 | 0.388193 Python 2.7.3, 64-bit test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.227471 | 0.268340 | 0.240884 | 0.236776 re_replace_test | 0.301516 | 0.325730 | 0.308626 | 0.307852 proper_join_test | 0.358766 | 0.383736 | 0.370958 | 0.371866 Python 3.2.3, 32-bit test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.438480 | 0.463380 | 0.447953 | 0.446646 re_replace_test | 0.463729 | 0.490947 | 0.472496 | 0.468778 proper_join_test | 0.397022 | 0.427817 | 0.406612 | 0.402053 Python 3.3.3, 64-bit test | minum | maximum | average | median ---------------------+------------+------------+------------+----------- while_replace_test | 0.284495 | 0.294025 | 0.288735 | 0.289153 re_replace_test | 0.501351 | 0.525673 | 0.511347 | 0.508467 proper_join_test | 0.422011 | 0.448736 | 0.436196 | 0.440318

Đối với chuỗi tầm thường, có vẻ như một vòng lặp trong thời gian là nhanh nhất, theo sau là chuỗi/nối chuỗi pythonic và Regex kéo lên phía sau.

Đối với các chuỗi không tầm thường, dường như có thêm một chút để xem xét. 32-bit 2.7? Đó là Regex để giải cứu! 2.7 64 bit? Một vòng lặp while là tốt nhất, bằng một biên độ tốt. 32-bit 3.2, đi với "thích hợp" # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 6. 64-bit 3.3, đi cho một vòng while. Lại., seems there's a bit more to consider. 32-bit 2.7? It's regex to the rescue! 2.7 64-bit? A while loop is best, by a decent margin. 32-bit 3.2, go with the "proper" # setup = ''' import re def while_replace(string): while ' ' in string: string = string.replace(' ', ' ') return string def re_replace(string): return re.sub(r' {2,}' , ' ', string) def proper_join(string): split_string = string.split(' ') # To account for leading/trailing spaces that would simply be removed beg = ' ' if not split_string[ 0] else '' end = ' ' if not split_string[-1] else '' # versus simply ' '.join(item for item in string.split(' ') if item) return beg + ' '.join(item for item in split_string if item) + end original_string = """Lorem ipsum ... no, really, it kept going... malesuada enim feugiat. Integer imperdiet erat.""" assert while_replace(original_string) == re_replace(original_string) == proper_join(original_string) #''' 6. 64-bit 3.3, go for a while loop. Again.

Cuối cùng, người ta có thể cải thiện hiệu suất nếu/ở đâu/khi cần, nhưng tốt nhất là nên nhớ câu thần chú:

  1. Lam cho no hoạt động
  2. Làm cho nó đúng
  3. Làm cho nó nhanh chóng

Ianal, YMMV, Caveat Emptor!

Làm thế nào để bạn thoát khỏi không gian đôi trong Python?

Phương thức phụ () để thay thế nhiều khoảng trống bằng một không gian, ví dụ:Kết quả = Re.phụ (' +', '', my_str).Ở đó.Phương thức phụ sẽ trả về một chuỗi mới có được bằng cách thay thế tất cả các lần xuất hiện của nhiều khoảng trống bằng một không gian duy nhất., e.g. result = re. sub(' +', ' ', my_str) . The re. sub method will return a new string that is obtained by replacing all occurrences of multiple spaces with a single space.

Làm thế nào để bạn xóa không gian trong Python?

Dải (): Phương thức Dải () là phương thức được chấp nhận phổ biến nhất để loại bỏ khoảng trắng trong Python.Đó là một chức năng tích hợp Python, cắt một chuỗi bằng cách loại bỏ tất cả các khoảng trắng dẫn đầu và dấu vết.The strip() method is the most commonly accepted method to remove whitespaces in Python. It is a Python built-in function that trims a string by removing all leading and trailing whitespaces.

Làm cách nào để loại bỏ một khoảng trống giữa hai chuỗi?

Dải () - Loại bỏ không gian dẫn đầu và dấu vết.STR.Phương thức dải () loại bỏ khoảng trắng dẫn đầu và dấu vết từ một chuỗi.—Remove Leading and Trailing Spaces. The str. strip() method removes the leading and trailing whitespace from a string.

Chủ đề