是否有一種簡短的方法可以刪除包含數字的列表中的所有字符串?從列表中刪除包含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