【问题标题】:Python finding index of elements with certain conditions [duplicate]Python在某些条件下查找元素的索引[重复]
【发布时间】:2016-08-12 05:09:35
【问题描述】:

我有以下字符串:

array = "TQTDTQD"

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

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

对于第 2 个 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 的结果就像 1st D:["T","T"], 2nd D: ["Q","Q"],似乎它在每个 D 之前打印出所有 T 或 Q ,

  1. 我只是想知道是否可以添加检查点之类的内容,以便在连续的 T/Q 结束后停止我的 for 循环。
  2. 另外我只是想知道是否可以使用相同的方法来查找每个 D 之后的连续 T/Q。

谢谢!

【问题讨论】:

  • 你为什么要标记这个python 2.7和python 3.x?你用的是哪个?您是否正在寻找一种两者都兼容的解决方案?
  • 另外,您能否提供更多示例输入和预期输出?我很难按照您指定的描述进行操作。对于字符串中的每个字母,您想找出前一个字母在您正在查看的字母之前和之后的连续出现次数吗?
  • @Two-BitAlchemist 抱歉我的描述不佳!对于字符串中的每个“D”,我想找到前一个字母前后连续出现的次数。
  • @Two-BitAlchemist 例如,对于数组 ="QDQQTDT",对于第一个 D,输出将是 1(Q 之前)和 2(Qs 之后),对于第二个 D,输出将是 1 (T) 之前和 1(T) 之后。
  • ^ 我建议看看这里,因为这是一个众所周知的难题,如果你能解决“最长重复子序列”问题,那就是它的 95%。最后 5% 会将其本地化为仅查看“D”字符之前和之后。您甚至可以在 re.split('D', your_input_string) 的返回值上运行您的解决方案

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


【解决方案1】:

我认为这可行:

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

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2017-12-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2019-12-31
    相关资源
    最近更新 更多