l = [[[u'HH2', u'AH0', u'L', u'OW1'], [u'HH', u'EH0', u'L', u'OW1']]]
tbl = {ord(d): u"" for d in u"0123456789"}
for sub in l:
sub[:] = [[s.translate(tbl) for s in w] for w in sub]
l = [[[u'HH2', u'AH0', u'L', u'OW1'], [u'HH', u'EH0', u'L', u'OW1']]]
def rem_d(l, tbl):
if isinstance(l, list):
return [rem_d(ele, tbl) for ele in l]
return l.translate(tbl)
tbl = {ord(d): u"" for d in u"0123456789"}
print(list(rem_d(l, tbl)))
In [13]: l = [[[u'HH2', u'AH0', u'L', u'OW1'], [u'HH', u'EH0', u'L', u'OW1']]]
In [14]: l = [l[0] for _ in range(100000)]
In [15]: timeit rem_d(l, tbl)
1 loops, best of 3: 777 ms per loop
In [16]: timeit remove_digits(l)
1 loops, best of 3: 1.83 s per loop
In [17]: remove_digits(l) == rem_d(l,tbl)
Out[17]: True
由于数字位于单词的末尾,并且每个项目最多只能包含2个字符,因此可以将字符串切分为前两个字符。这样就省去了结尾的数字。你知道吗
可以使用
str.translate
删除数字:输出:
如果要将其用于任意嵌套:
输出:
翻译将比迭代每个数字快得多:
对于任意嵌套的字符串列表,这里有一个递归解决方案,它将从所有字符串中删除任何数字
示例
编辑 要为每个字符串添加扩展名,可以使用相同的方法
所以你可以说
相关问题 更多 >
编程相关推荐