例如,我想在第三个字符之后删除所有字符。

我在网上找到了此代码,它可以工作,但是我在学习它的工作方式时遇到了麻烦,想问一下,以便我能完全理解它。

 def indexList(s, item, i=0):
    """
    Return an index list of all occurrances of 'item' in string/list 's'.
    Optional start search position 'i'
    """
    i_list = []
    while True:
        try:
            i = s.index(item, i)
            i_list.append(i)
            i += 1
        except:
            break
    return i_list

def strip_chrs(s, subs):
    for i in range(indexList(s, subs)[-1], len(s)):
        if s[i+1].isalpha():
            return data[:i+1]

data = '115Z2113-3-777-55789ABC7777'
print strip_chrs(data, '-')

这是我的问题
真是一回事:这是真的吗?
除此以外:除了什么?为什么在此编码一个中断?

提前致谢!

最佳答案

这是一种方法:

def trunc_at(s, d, n=3):
    "Returns s truncated at the n'th (3rd by default) occurrence of the delimiter, d."
    return d.join(s.split(d, n)[:n])

print trunc_at("115Z2113-3-777-55789ABC7777", "-")

这个怎么运作:
  • 在每次使用分隔符s时,都会使用d将字符串s.split(d)拆分为一个列表。我们使用split的第二个参数来表示要进行的最大拆分次数(因为没有理由在第一次n时间之后继续拆分)。结果是一个列表,例如["115Z2113", "3", "777", "55789ABC7777"]
  • 使用n来获取列表中第一个[:n]项的一部分。结果是另一个列表,例如["115Z2113", "3", "777"]
  • 列表重新加入一个字符串,使用d将分隔符d.join(...)放置在列表的每个项目之间,例如,生成"115Z2113-3-777"
  • 09-26 22:15
    查看更多