簡體   English   中英

查找兩個相同弦之間的距離

[英]Find distance between two same strings

假設我有以下字符串:ABCyuioppsfsABCsfrsfsfsaABCfds

如何快速找到第一個字符串“ ABC”和所有其他“ ABC”字符串之間的距離?

第一個“ ABC”字符串從字符串的第一個位置開始,第二個“ ABC”字符串從字符串的第13個位置開始,第三個字符串從字符串的第25個位置開始。 我想找到如何快速計算

列表理解如何?

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]

您可以在列表理解中使用re.finditer來實現。 這也將返回第一個匹配項,該匹配項當然可以忽略或分割:

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

您可以找到每個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]

如果您正在考慮“之間的距離”,則必須指定該距離是在“ 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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM