从字符串中重复删除字符

时间:2015-08-08 13:17:05

标签: python loops for-loop repeat

>>> split=['((((a','b','+b']
>>> [ (w[1:] if w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')) else w) for w in split]
['(((a','b','b']

我想改为['a', 'b', 'b']

我想创建一个重复功能来重复命令。我从一开始就清除了所有'('。假设我的分割时间较长,我想清除单词前面的所有(((。我不使用replace,因为它会更改单词之间的'('

E.g。如果'('位于'aa(aa'之类的单词中间,我不想更改此内容。

1 个答案:

答案 0 :(得分:8)

没有必要重复你的表达,你没有使用正确的工具,就是全部。您正在寻找str.lstrip() method

[w.lstrip(' !@#$%^&*()-_+=~:\';,.?|\\/<>{}[]"') for w in split]

该方法将字符串参数视为 set 字符,并完全按照您在代码中尝试执行的操作;如果它是该集合的一部分,则重复删除最左侧的字符。

从末尾删除字符时会有相应的str.rstrip(),而str.strip()会从两端删除它们。

演示:

>>> split=['((((a', 'b', '+b']
>>> [w.lstrip(' !@#$%^&*()-_+=~:\';,.?|\\/<>{}[]"') for w in split]
['a', 'b', 'b']

如果你真的需要重复一个表达式,你可以为该任务创建一个新函数:

def strip_left(w):
    while w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')):
        w = w[1:]
    return w

[strip_left(w) for w in split]