字符串中的连续值,获取索引

2024-05-14 00:50:06 发布

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

下面是一个长度约为+1000的python字符串。在

string1 = "XXXXXXXXXXXXXXXXXXXXXAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBB........AAAAXXXXX"
len(string1)  ## 1311

我想知道连续X的结尾和非X字符开始的索引。从左到右读取这个字符串,第一个非X字符位于索引位置22,第一个非X字符位于索引位置1306。在

如何找到这些指数?在

我的猜测是:

^{pr2}$

问题是它输出所有不是X的索引,它没有给出连续X的结束处的索引。在

更让我困惑的是如何“检查”连续的X

string2 = "XXXXAAXAAAAAAAAAAAAAAABBBBBBBBBBBBBB........AAAAXXXXX"

在这里,连续的X结束于索引4,而不是索引7。我该如何检查前面的几个字符是否真的不再连续?在


Tags: 字符串len结尾指数字符string1pr2string2
3条回答

如果序列,如您所说,只在字符串的开头和结尾,那么一个简单的循环/反向循环就足够了:

string1 = "XXXXXXXXXXXXXXXXXXXXXAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBB........AAAAXXXXX"

left_index = 0
for char in string1:
    left_index += 1
    if char != "X":
         break

right_index = len(string1)
for char in reversed(string1):
    if char != "X":
         break
    right_index -= 1

print(left_index)  # 22
print(right_index)  # 65

如果我很理解你的问题,你只要:

def getIndexs(string):
  lst =[]
  flag = False
  for i, char in enumerate(string):

    if char == "x":
      flag = True

    if ((char != "x") and flag):
      lst.append(i-1)
      flag = False


  return lst


print(getIndexs("xxxxbbbxxxxaaaxxxbb"))

[3, 10, 16]

使用regex,拆分第一组和最后一组X,得到它们的长度来构造索引。在

import re

mystr = 'XXXXAAXAAAAAAAAAAAAAAABBBBBBBBBBBBBB........AAAAXXXXX'
xs = re.split('[A-W|Y-Z]+', mystr)
indices = (len(xs[0]), len(mystr) - len(xs[-1]) - 1)
# (4, 47)

I simply need the outputs for the indices. I'm then going to put them in randint(first_index, second_index)

可以像这样将索引传递给函数

^{pr2}$

但是,我怀疑您希望使用randint(first_index, last_index)的输出从中间选择一个随机字符,这将是一个更短的选择。在

from random import choice
randchar = choice(mystr.strip('X'))

相关问题 更多 >