从字符串列表中删除整数

2024-09-29 19:20:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,我想删除其中的整数

[[[u'HH', u'AH0', u'L', u'OW1'], [u'HH', u'EH0', u'L', u'OW1']]]

以上列表应返回

[[[u'HH', u'AH', u'L', u'OW'], [u'HH', u'EH', u'L', u'OW']]]

我试过用过滤器

filter(lambda i: not str.isdigit(i), phoneseqList[0])

但这似乎不起作用


Tags: lambda字符串过滤器列表hhnot整数filter
3条回答

由于数字位于单词的末尾,并且每个项目最多只能包含2个字符,因此可以将字符串切分为前两个字符。这样就省去了结尾的数字。你知道吗

l = [[u'HH', u'AH0', u'L', u'OW1'], [u'HH', u'EH0', u'L', u'OW1']]

newL = []
for sublist in l:
    tempL = []
    for item in sublist:
        tempL.append(item[:2])
    newL.append(tempL)
print newL

可以使用str.translate删除数字:

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]

输出:

[[[u'HH', u'AH', u'L', u'OW'], [u'HH', u'EH', u'L', u'OW']]]

如果要将其用于任意嵌套:

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)))

输出:

[[[u'HH', u'AH', u'L', u'OW'], [u'HH', u'EH', u'L', u'OW']]]

翻译将比迭代每个数字快得多:

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

对于任意嵌套的字符串列表,这里有一个递归解决方案,它将从所有字符串中删除任何数字

def remove_digits(i):
    if isinstance(i, list):
        return [remove_digits(j) for j in i]
    else:
        return ''.join(j for j in i if not j.isdigit())

示例

>>> l = [[[u'HH', u'AH0', u'L', u'OW1'], [u'HH', u'EH0', u'L', u'OW1']]]
>>> remove_digits(l)
[[['HH', 'AH', 'L', 'OW'], ['HH', 'EH', 'L', 'OW']]]

编辑 要为每个字符串添加扩展名,可以使用相同的方法

def add_ext(i, ext):
    if isinstance(i, list):
        return [add_ext(j, ext) for j in i]
    else:
        return i + ext

所以你可以说

>>> add_ext(l, '.jpeg')

相关问题 更多 >

    热门问题