【问题标题】:Repeatedly remove characters from string反复从字符串中删除字符
【发布时间】:2015-08-08 13:17:05
【问题描述】:
>>> split=['((((a','b','+b']
>>> [ (w[1:] if w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')) else w) for w in split]
['(((a','b','b']

我想要['a', 'b', 'b']

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

例如如果'(' 位于'aa(aa' 之类的单词中间,我不想更改它。

【问题讨论】:

  • 人们,OP 尝试了一些东西,证明了这一点,并设法解释了他们在做什么以及为什么。我看不出有什么理由不赞成这个问题,真的。
  • @MartijnPieters,我认为编辑对它之前的样子有所帮助
  • @PadraicCunningham:我所做的只是格式化代码并稍微清理一下语言。
  • @MartijnPieters,我没有 dv,我只是说在你编辑之前它是不可读的

标签: python loops for-loop repeat


【解决方案1】:

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

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

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

有一个对应的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]

【讨论】:

  • 你的评论很棒
猜你喜欢
  • 2018-04-01
  • 2012-04-08
  • 1970-01-01
  • 2021-01-23
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多