当前位置: 首页 > 知识库问答 >
问题:

Python查找具有特定条件的元素的索引[重复]

诸葛阳成
2023-03-14

我有以下字符串:

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. 我只是想知道,如果连续T/Q结束,是否可以添加一个检查点来停止for循环
  2. 此外,我只是想知道是否可以使用相同的方法在每个D之后找到连续的T/Q

非常感谢

共有1个答案

邵畅
2023-03-14

我认为这是可行的:

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')
 类似资料:
  • 问题内容: 假设我有一个整数的NumPy数组,如下所示: 我想找到数组的开始和结束索引,其中值的值大于重复的x倍(例如5倍)。因此,在上述情况下,其值为22和6。重复的22的开始索引为3,结束的索引为8。重复6相同。Python中是否有特殊的工具对您有所帮助?否则,我将遍历数组索引以获取索引,并将实际值与前一个进行比较。 问候。 问题答案: 使用@WarrenWeckesser在此处给出的和方法来

  • 在纯JavaScript中,如何找到最接近具有特定类的树的元素的祖先?例如,在这样的树中: 然后我想要,如果我在上尝试这个并搜索。

  • 假设我有这个HTML: 现在我要访问 ,它与标记在同一个tr中,带有href“Amazon”。最好的方法是什么?我需要一个for循环覆盖所有的div吗?还是我可以使用@findby注释?我是否需要多个@findby或@findall来获取列表中的所有div以便为Amazon检查这些div?

  • 问题内容: 如何 在纯JavaScript中 找到与具有特定类的树最接近的元素的原型?例如,在像这样的树中: 然后,我想在上尝试并搜索。 问题答案: 更新:大多数主流浏览器现在都支持 请注意,这可以匹配选择器,而不仅仅是类 https://developer.mozilla.org/zh- CN/docs/Web/API/Element.closest 对于不支持但拥有一个的旧版浏览器,可以构建类

  • 我有一个对象列表 现在我想找到B对象B的最后一个匹配项,使得B.x=1。我可以通过简单地运行for循环并更新每个匹配的索引来实现这一点。但在Java 8中如何做到这一点,我还不清楚。 我看到有Java 8 API用于查找findFirst()和findAny(),但没有找到任何类似于查找最后一个事件的API。

  • 我试图找到第一个元素的索引大于阈值,像这样: 这可以在一个班轮内完成吗?我发现: 我不确定这个表达式的作用,它似乎总是返回0。。。有人能指出错误并解释一下表达方式吗?