Python在一定条件下求元素的索引

2024-09-29 23:32:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

array = "TQTDTQD"

对于数组中的每个D,我是否可以知道在每个D之前和之后有多少个连续的T或D与每个D之前的字母相同。所以对于第一个D,它是T之前的字母,然后我想找出在第一个D之前和之后有多少个连续的T。对于第二个D,它是Q之前的字母,所以我想找出第二个D之前和之后连续的Q

例如,对于第一个D,在D之前有1个T,在出现Q之前有1个T(例如:对于第一个D,它类似于“TDT”)

对于第二个D,之前有一个连续的Q,之后没有Q

我确实从以下Python代码开始查找每个T,Q,D的位置:

get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]
T_position = get_indexes("T",array)
Q_position = get_indexes("Q",array)
D_position = get_indexes("D",array) 

然后我试着在每个D之前找出T

for each in range(0,len(D_position)):
  RightBeforeD = array[D_position[each]-1]
  numberofT = []
  for eachofallbefore in reversed(range(0,D_position[each])):
    if array[eachofallbefore] ==RightBeforeD:
      numberofT.append(array[eachofallbefore])
      print (numberofT)

但这两个D的结果是第一个D:[“T”,“T”],第二个D:[“Q”,“Q”],似乎它打印出了每个D之前的所有T或Q

  1. 我只是想知道,如果我可以添加一个像检查点停止我的for循环,一旦连续的T/Q的结束。你知道吗
  2. 另外,我只是想知道我是否可以用同样的方法在每个D之后找到连续的T/Q

很多thx!你知道吗


Tags: inforgetlenif字母positionrange
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:28

我认为这是可行的:

import re
def sequences(s):
    xdx = re.findall(r"['Q']+['D']['Q']*|['T']+['D']['T']*", s)

    for i, d_group in enumerate(xdx):
        before, after = d_group.split('D')
        print("For D{0} there were {1}({2})s before and {3}({2})s after".format(i+1, len(before), before[0], len(after)))


if __name__ == "__main__":
     sequences('QQQDQQTQDQQTDTDQQ')

相关问题 更多 >

    热门问题