Các kỹ thuật tiêu chuẩn để lọc danh sách được áp dụng, mặc dù chúng không hiệu quả bằng split/join
hoặctranslate
phương pháp.
Chúng ta cần một bộ khoảng trắng:
>>> import string
>>> ws = set(string.whitespace)
Nội dung filter
:
>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'
Một sự hiểu biết danh sách (có, sử dụng dấu ngoặc: xem điểm chuẩn bên dưới):
>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'
Không biết:
>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'
Điểm chuẩn:
>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025
>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995