2012-12-02 39 views
11

Tôi muốn xóa tất cả dấu cách khỏi chuỗi.Cách ưa thích để xóa khoảng trắng khỏi chuỗi

"như fa sdf sdfsdf"

Kết quả sẽ là:

"asfasdfsdfsdf"

Có một số cách tôi có thể nghĩ ra để đạt được điều này, và tôi tự hỏi cái nào là tốt nhất.

1.

"".join(" as fa sdf sdfsdf ".split()) 

2.

" as fa sdf sdfsdf ".replace(" ", "") 

Và tôi cho rằng có nhiều.
Ứng dụng nào được ưu tiên?

+0

Tùy chọn 2 có vẻ phù hợp với tôi. – xagyg

Trả lời

6

tôi tin rằng phương pháp tốt nhất và hiệu quả nhất là phiên bản thứ hai, " as fa sdf sdfsdf ".replace(" ", ""), làm bằng chứng bạn có thể sử dụng timeit mô-đun:

  • python -m timeit '"".join(" as fa sdf sdfsdf ".split())'

    1000000 loops, best of 3: 0.554 usec per loop

  • python -m timeit '" as fa sdf sdfsdf ".replace(" ", "")'

    1000000 loops, best of 3: 0.405 usec per loop

+0

Tôi nghĩ rằng bạn có nghĩa là "iteration (s)"? – Thomas

0

Regex rất đơn giản và hoạt động. split() hơi phức tạp hơn một chút. Regex được ưu tiên hơn split().

+0

Tôi hoàn toàn đồng ý. Nhưng câu hỏi không phải là về regex. –

+0

oops. đã suy nghĩ về java khi tôi trả lời điều này. – hologram

4

replace(" ", "") là rõ ràng và gọn gàng nhất.

+2

+1. Tùy chọn này nên được chọn vì nó mô tả rõ ràng nhất * ý định *. (Bạn muốn "từ xa không gian", bạn không muốn "chia nhỏ và nối chuỗi với các dấu tách khác nhau"). – Heinzi

2

Sử dụng replace sẽ không loại bỏ tất cả các ký tự khoảng trắng (ví dụ, dòng mới, tab):

>>> 'abc\t\ndef'.replace(" ", "") 
'abc\t\ndef' 

tôi thích string.translate:

>>> import string 
>>> 'abc\t\ndef'.translate(None, string.whitespace) 
'abcdef' 

EDIT: string.translate không làm việc cho chuỗi Unicode; bạn có thể sử dụng re.sub('\s', '', 'abc\n\tdef') để thay thế.

+0

Tôi nghĩ rằng phương pháp này xứng đáng được công nhận nhiều hơn (có nghĩa là tôi nên đọc tài liệu mô-đun chuỗi). :) – Talvalin

+0

@martineau, no, 'string.translate' tiếc là không hoạt động với các chuỗi Unicode (hoặc làm việc ở tất cả để xóa trong Python 3). –

+0

@SamuelIsaacson, không chính xác. Python 3: ''abc \ t \ ndef'.translate (str.maketrans (' ',' ', string.whitespace))'. Các phím từ điển phải là các giá trị thứ tự Unicode (số nguyên), không phải ký tự. –

1

re.sub(" ","", s) là yêu thích của tôi.

+0

tái cho một thay thế char duy nhất? ouch ... –

4

Sử dụng này để loại bỏ tất cả các khoảng trắng cùng một lúc:

import re 

s = ' as fa sdf sdfsdf ' 
s = re.sub(r'\s+', '', s) 

s 
=> 'asfasdfsdfsdf' 

Ưu điểm của phương pháp này là nó giúp loại bỏ tất cả các không gian ở giữa các nhân vật - một, hai, dù có bao nhiêu có, bởi vì các biểu thức chính quy r'\s+' trận đấu "một hoặc nhiều" nhân vật khoảng trắng - bao gồm khoảng trắng, tab, vv

+0

Nhưng thay thế thường xuyên sẽ xem từng chữ một tại một thời điểm và hoàn thành nhiệm vụ cùng loại bỏ tất cả các dấu cách. Có khả năng hiệu quả hơn do độ phức tạp tính toán ít hơn. –

+1

phụ thuộc vào kịch bản của bạn, bạn có thể muốn xem xét các loại không gian khác như tab \ r, \ n, \ t, hoặc một số khoảng trống rất lạ như thế này - "" trong Unicode. Điều đó nói rằng, nhiều hơn nữa đã được xem xét - bạn có thể muốn có một danh sách trắng thay vì danh sách xấu. – HelloSam

2

biểu thức chính quy

>>> str = " as fa sdf sdfsdf " 
>>> import re 
>>> re.sub(r'\s', '', str) 
+1

+1 vì nó hỗ trợ unicode và loại bỏ tất cả các loại khoảng trắng không chỉ là ký tự khoảng trắng (và mặc dù thực tế là 'str' được sử dụng như một tên biến giấu kiểu tích hợp cùng tên). – martineau

1

Just để ném một số khác vào danh sách kết hợp:

from string import whitespace 
ws = set(whitespace) 
''.join(ch for ch in my_string if ch not in ws) 
+0

''' .join (ch cho ch trong my_string nếu không phải là ch.isspace())' –

Các vấn đề liên quan