繁体   English   中英

在跳过某些字符时查找字符串中的位置

[英]find position in string while skipping over certain characters

我得到了这个字符串和这个索引位置,我试图在跳过“D”字符的同时找到索引位置。

s="MMMMMMMMDDDDDDDMMMMMMIIMMDDDDDDDDDDDMMMMMMM" 
tr1 = 13

截至目前,我有这个代码:

for x in range(tr1):
    if s[x] == "D":
        continue
     else:
        print (s[x], x+1)

我应该得到 23 的位置

我不明白你为什么要得到 23? 你的代码做你想做的吗? 由于您使用的是range()函数,因此您的代码在 13 次迭代后停止,这就是您想要的吗? 如果要打印所有不是 'D' 的字符及其索引+1,我宁愿执行以下操作:

    for i, char in enumerate(s):
        if char != 'D':
            print(char, i+1)

相反,如果您想在找到的第一个 'D' 处停止 for 循环,只需添加一个像这样的 break 语句:

    for i, char in enumerate(s):
        if char != 'D':
            print(char, i+1)
        elif char == 'D':
            break #stop at first 'D' found

你的 23 应该来自哪里?

我不确定你到底想要什么,但如果我理解正确,你想要第 13 个位置的字符并且你不想计算等于 'D' 的字符。 在您的 for 循环中,您只是在检查第一个第 13 个字符,因为您将 tr1 放在范围内!

所以你想要的代码应该是这样的:

count=0
for x in range(len(s)):

    if s[x] == "D":
        continue
    else:
        count +=1

    if (count == 13):
        print (s[x], x+1)
        break

如果你想调整字符“I”的位置,代码应该是:

count=0
for x in range(len(s)):

    if s[x] == "D":
        continue
    else:
        count +=1

    if (count >= 13):
        if (s[x] == "I"):
            print (s[x], x+1)

通过这种方式,您可以拥有之前提到的索引23

这是你想要的 ? 我使用 reg ex 去掉大写的 Ds,然后索引 ([13]) 以从 0 开始检索第 13 个位置

import re
s="MMMMMMMMDDDDDDDMMMMMMIIMMDDDDDDDDDDDMMMMMMM" 
print (re.findall("[^D]",s)[13])
> 'M'

如果要查看原始字符串(包括 D)的数据:

print (s[13])
>'D'

这是一个应该可以解决问题的单行:

[i for _,i in enumerate(s) if i!='D'][13

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM