2013-04-17 94 views

Trả lời

14

Một thực hiện thực sự đơn giản là:

out = "".join(c for c in asking if c not in ('!','.',':')) 

và tiếp tục bổ sung bất kỳ loại dấu chấm câu.

Một cách hiệu quả hơn sẽ

import string 
stringIn = "string.with.punctuation!" 
out = stringIn.translate(stringIn.maketrans("",""), string.punctuation) 

Edit: Có một số cuộc thảo luận thêm về tính hiệu quả và khác triển khai ở đây: Best way to strip punctuation from a string in Python

+1

'strip()' sẽ không hoạt động. Xem http://docs.python.org/2/library/stdtypes.html#str.strip –

+0

@BrendenBrown Bạn thực sự là chính xác. Nửa năm mà không nhìn vào python và bạn biết gì. Sửa đổi đáng xấu hổ sau đó. –

+0

Để xóa, bạn có thể đơn giản hóa dòng cuối cùng thành 'out = stringIn.translate (None, string.punctuation)' (xem https://docs.python.org/2/library/stdtypes.html#str.translate) – asmaier

12
import string 

asking = "".join(l for l in asking if l not in string.punctuation) 

bộ lọc với string.punctuation.

0

Công trình này, nhưng có thể có giải pháp tốt hơn.

asking="hello! what's your name?" 
asking = ''.join([c for c in asking if c not in ('!', '?')]) 
print asking 
+0

bạn không cần danh sách bên trong trong trường hợp này, và điều này sẽ trả về ''hellowhat'syourname''. –

+0

@BurhanKhalid Bạn đúng danh sách bên trong là không cần thiết nhưng đầu ra là chính xác. –

0

Strip sẽ không hoạt động. Nó chỉ loại bỏ đầu và đuôi các trường hợp, không phải tất cả mọi thứ ở giữa: http://docs.python.org/2/library/stdtypes.html#str.strip

Có vui vẻ với bộ lọc:

import string 
asking = "hello! what's your name?" 
predicate = lambda x:x not in string.punctuation 
filter(predicate, asking) 
+0

. Điều quan trọng là bọc 'list()' xung quanh toàn bộ hàm 'filter()' nếu bạn đang sử dụng Python 3.x, vì nhiều hàm dựng sẵn không còn trả về 'list' nhưng các đối tượng' iterable' đặc biệt nữa. Ngoài ra, bạn dường như đã bỏ qua việc đặt 'input' (hoặc' raw_input' cho Python 2.x) xung quanh chuỗi trong dòng thứ hai, và bạn nên đặt một cái gì đó như 'ask = ...' cho dòng cuối cùng. – SimonT

+1

Có vẻ như cách tiếp cận này không được khuyến khích trong bộ lọc 3.x: http://stackoverflow.com/questions/13638898/how-to-use-filter-map-and-reduce-in-python-3-3-0 –

+0

' 'là xấu và chậm khi bạn phải sử dụng một' lambda' với nó, không may thay thế của bạn là ''' .join (ifilterfalse (một phần (chứa, dấu chấm câu), hỏi))' – jamylak

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