查找两个相同字符串之间的距离

时间:2019-04-16 19:32:05

标签: python

假设我有以下字符串: ABCyuioppsfsABCsfrsfsfsaABCfds

如何快速找到第一个字符串“ ABC”和所有其他“ ABC”字符串之间的距离?

第一个“ ABC”字符串从字符串的第一个位置开始,第二个“ ABC”字符串从字符串的第13个位置开始,第三个字符串从字符串的第25个位置开始。我想找到如何快速计数

4 个答案:

答案 0 :(得分:2)

列表理解如何?

A='ABCyuioppsfsABCsfrsfsfsaABCfds'
[len(i) for i in A.split('ABC')][:-1]
  

[0,9,9]

这会打印出每个'ABC'之间的距离。

编辑:对您的帖子进行会计处理:

import itertools
A='ABCyuioppsfsABCsfrsfsfsaABCfds'
li=[len(i)+1 if len(i)==0 else len(i)+len('ABC') for i in A.split('ABC')][:-1]
print(list(itertools.accumulate(li)))
  

[1,13,25]

答案 1 :(得分:1)

您可以在列表理解中使用re.finditer。这也将返回第一个匹配项,该匹配项当然可以忽略或分割:

>>> import re
>>> s = 'ABCyuioppsfsABCsfrsfsfsaABCfds'
>>> [sub.start() for sub in re.finditer('ABC', s)]
[0, 12, 24]

答案 2 :(得分:0)

您可以找到每个ABC的所有索引,然后从其余的索引中减去第一个:

from re import finditer

abc = "ABCyuioppsfsABCsfrsfsfsaABCfds"

indices = [m.start() for m in finditer('ABC', abc)]

diffs = [x - indices[0] for x in indices[1:]]

print(diffs)
# [12, 24]

答案 3 :(得分:0)

如果您正在考虑“之间的距离”,则必须指定该距离是在“ ABC”的每个开始位置之间还是在它们之间的字符数(“ ABC”字符串本身除外)之间。另一方面,您的示例似乎表明您根本不在寻找距离。似乎您正在寻找基于1的索引。 (Python列表中的索引从零开始)。

s = "ABCyuioppsfsABCsfrsfsfsaABCfds"

from itertools import accumulate

distance_between_strings = accumulate( len(d)+3*(i>0) for i,d in enumerate(s.split("ABC")[1:-1]) ) 
print(list(distance_between_strings))
# [9, 21]

distance_between_starts = accumulate(len(d)+3 for d in s.split("ABC")[1:-1])
print(list(distance_between_starts))
# [12, 24]

import re
just_positions = [m.start()+1 for m in re.finditer("ABC",s)]
print(just_positions)
# [1, 13, 25]