Bao*_*anh 3 python loops for-loop repeat
>>> split=['((((a','b','+b']
>>> [ (w[1:] if w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')) else w) for w in split]
['(((a','b','b']
Run Code Online (Sandbox Code Playgroud)
我想要['a', 'b', 'b'].
我想创建一个重复函数来重复该命令.我'('从一开始就让我的分裂清晰.假设我的分裂时间更长,我想清除所有(((的话.我不使用,replace因为它会改变'('单词之间的内容.
例如,如果'('它在一个单词的中间'aa(aa',我不想改变这个.
没有必要重复你的表达,你没有使用正确的工具,就是全部.您正在寻找str.lstrip()方法:
[w.lstrip(' !@#$%^&*()-_+=~:\';,.?|\\/<>{}[]"') for w in split]
Run Code Online (Sandbox Code Playgroud)
该方法将字符串参数视为一组字符,并完全按照您在代码中尝试执行的操作; 如果它是该组的一部分,则重复删除最左侧的字符.
有一个相应的str.rstrip()用于从末尾删除字符,并str.strip()从两端删除它们.
演示:
>>> split=['((((a', 'b', '+b']
>>> [w.lstrip(' !@#$%^&*()-_+=~:\';,.?|\\/<>{}[]"') for w in split]
['a', 'b', 'b']
Run Code Online (Sandbox Code Playgroud)
如果你真的需要重复一个表达式,你可以为该任务创建一个新函数:
def strip_left(w):
while w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')):
w = w[1:]
return w
[strip_left(w) for w in split]
Run Code Online (Sandbox Code Playgroud)