>>> 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'
之类的单词中间,我不想更改此内容。
答案 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]