下面是一段长度约为+1000的python字符串。
string1 = "XXXXXXXXXXXXXXXXXXXXXAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBB........AAAAXXXXX"
len(string1) ## 1311
我想知道连续 X 的结束位置和非 X 字符开始位置的索引。从左到右读取此字符串,第一个非 X 字符位于索引位置 22,从右数第一个非 X 字符位于索引位置 1306。
如何找到这些索引?
我的猜测是:
for x in string1:
if x != "X":
print(string.index(x))
问题是它输出所有不是 X 的索引。它没有给我连续 X 结束的索引。
更让我困惑的是如何“检查”连续的 X。假设我有这个字符串:
string2 = "XXXXAAXAAAAAAAAAAAAAAABBBBBBBBBBBBBB........AAAAXXXXX"
在这里,连续的 X 在索引 4 处结束,而不是索引 7。我如何检查前面的几个字符是否真的不再连续?
最佳答案
使用正则表达式,拆分第一组和最后一组 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)
可以像这样将索引传递给函数
randint(*indices)
但是,我怀疑您想使用 randint(first_index, last_index)
的输出从中间选择一个随机字符,这将是一个更短的选择。
from random import choice
randchar = choice(mystr.strip('X'))
关于python - 字符串中的连续值,获取索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642368/