是否有一种简短的方法可以删除包含数字的列表中的所有字符串?从列表中删除包含python数字的字符串
例如
my_list = [ 'hello' , 'hi', '4tim', '342' ]
将返回
my_list = [ 'hello' , 'hi']
是否有一种简短的方法可以删除包含数字的列表中的所有字符串?从列表中删除包含python数字的字符串
例如
my_list = [ 'hello' , 'hi', '4tim', '342' ]
将返回
my_list = [ 'hello' , 'hi']
我会使用一个正则表达式:
import re
my_list = [s for s in my_list if not re.search(r'\d',s)]
从时间上来说,使用正则表达式显著更快的是你的样品数据比isdigit解决方案。无可否认,它比isalpha
慢,但其行为与标点符号,空格等稍有不同。由于问题并未指定这些字符串应该发生什么,因此不清楚哪个是最佳解决方案。
import re
my_list = [ 'hello' , 'hi', '4tim', '342' 'adn322' ]
def isalpha(mylist):
return [item for item in mylist if item.isalpha()]
def fisalpha(mylist):
return filter(str.isalpha,mylist)
def regex(mylist,myregex = re.compile(r'\d')):
return [s for s in mylist if not myregex.search(s)]
def isdigit(mylist):
return [x for x in mylist if not any(c.isdigit() for c in x)]
import timeit
for func in ('isalpha','fisalpha','regex','isdigit'):
print func,timeit.timeit(func+'(my_list)','from __main__ import my_list,'+func)
这里是我的结果:
isalpha 1.80665302277
fisalpha 2.09064006805
regex 2.98224401474
isdigit 8.0824341774
尝试:
import re
my_list = [x for x in my_list if re.match("^[A-Za-z_-]*$", x)]
你从哪里得到这个预定义的字符集? – jamylak
确保这些字符,请使用内置的数字串,并测试他们的存在。 我们会稍微想一下,只是在列表理解中测试真实性;如果它返回任何字符串中的数字。
所以:
out_list = []
for item in my_list:
if not [ char for char in item if char in string.digits ]:
out_list.append(item)
而另一个微小的变化:
>>> import re
>>> filter(re.compile('(?i)[a-z]').match, my_list)
['hello', 'hi']
也放到了你再是有效的字符(如空格/标点符号/其他)
嗯,这完全改变了问题 – jamylak