我有以下字符串:
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,
答案 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')