Python查找具有特定条件的元素索引

时间:2016-04-19 19:59:22

标签: python python-2.7 python-3.x

我有以下字符串:

array = "TQTDTQD"

对于阵列中的每个D,无论如何我都知道在每个D之前和之后有多少连续的T或D与每个D之前的字母相同。所以对于第一个D,它之前的字母是T,那么我想知道在第一个D之前和之后有多少个连续的T。对于第二个D,它之前的字母是Q,所以我想找到#在第二轮之前和之后的连续Q.

例如,对于第一个D,在D之前有1 T,在出现之前有1 T直到有Q.(例如:对于第一个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&#34 ;," Q"],似乎它在每个D之前打印出所有T或Q,

  1. 我只是想知道在连续的T / Q结束后我是否可以添加类似检查点的东西来停止我的for循环。
  2. 此外,我只是想知道是否可以使用相同的方法在每个D后找到连续的T / Q.
  3. 很多人!

1 个答案:

答案 0 :(得分:0)

我认为这有效:

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')