l--*_*''' 1 python string list
我有一个清单:
a = ['a','b','c'.........'A','B','C'.........'Z']
Run Code Online (Sandbox Code Playgroud)
我有字符串:
string1= 's#$%ERGdfhliisgdfjkskjdfW$JWLI3590823r'
Run Code Online (Sandbox Code Playgroud)
我想只保留那些string1存在的角色a
这样做最有效的方法是什么?或许不是a一个列表,我应该只是使它成为一个字符串?像这样a='abcdefg..........ABC..Z'?
这应该更快.
>>> import re
>>> string1 = 's#$%ERGdfhliisgdfjkskjdfW$JWLI3590823r'
>>> a = ['E', 'i', 'W']
>>> r = re.compile('[^%s]+' % ''.join(a))
>>> print r.sub('', string1)
EiiWW
Run Code Online (Sandbox Code Playgroud)
这甚至比这更快.
>>> all_else = ''.join( chr(i) for i in range(256) if chr(i) not in set(a) )
>>> string1.translate(None, all_else)
'EiiWW'
Run Code Online (Sandbox Code Playgroud)
我的笔记本电脑上有44微秒对13微秒.
那个怎么样?
(编辑:结果,翻译产生最佳表现.)
''.join([s for s in string1 if s in a])
Run Code Online (Sandbox Code Playgroud)
说明:
[s for s in string1 if s in a]
Run Code Online (Sandbox Code Playgroud)
在string1中创建所有字符的列表,但前提是它们也在列表a中.
''.join([...])
Run Code Online (Sandbox Code Playgroud)
通过将其与给定列表的元素之间的任何内容('')连接,将其转换回字符串.