搜索字符串以查找索引

时间:2018-01-09 11:06:30

标签: python

我想找到" a"的所有索引。我的字符串的项目,但它只打印第一个。这个程序有什么问题:

def str_lookup_reverse(s, c):
    for index in range(len(s)-1):
        if s[index] == c:
            print(index)

s = "parisa"
str_lookup_reverse(s, "a")

7 个答案:

答案 0 :(得分:4)

您是否尝试过这样:

for i, letter in enumerate(s):
    if letter == c:
        print(i)

答案 1 :(得分:2)

您正在使用http://localhost:18223/Login/Login,它不会遍历字符串的整个长度。您应该使用len(s)-1

len(s)

为了说明问题,请比较:

def str_lookup_reverse(s, c):
    for index in range(len(s)):
        if s[index] == c:
            print(index)

s = "parisa"
str_lookup_reverse(s, "a")
text='parisa'
for i in range(len(text)-1):
    print("%s, %s") % (i, text[i])

使用:

0, p
1, a
2, r
3, i
4, s
for i in range(len(text)):
    print("%s, %s") % (i, text[i])

答案 2 :(得分:2)

你正在删除字符串的长度......所以你要删除最后一个字符串#=' paris'

def str_lookup_reverse(s, c):
    for index in range(len(s)-1):
        if s[index] == c:
            print(index)

s = "parisa"
str_lookup_reverse(s, "a")

这将解决您的问题:

def str_lookup_reverse(s, c):
    for index in range(len(s)):
        if s[index] == c:
            print(index)

s = "parisa"
str_lookup_reverse(s, "a")

答案 3 :(得分:1)

非常接近。你的循环过早结束,你需要循环遍历整个字符串的索引:

for index in range(len(s))

而不是:

for index in range(len(s)-1)

循环除了最后一个字符之外的所有字符,其中出现第二个"a"。这意味着您的第二个"a"永远无法到达。

此外,更加pythonic的方式是使用enumerate()

def str_lookup_reverse(s, c):
    for i, e in enumerate(s):
        if e == c:
            print(i)

s = "parisa"
str_lookup_reverse(s, "a")

哪个也输出你想要的东西:

 1
 5

答案 4 :(得分:1)

正如其他人提到的for index in range(len(s)-1):问题,需要for index in range(len(s)):

现在,这是enumerate的方法:

[i for(i, v) in enumerate(s) if v == 'a']

e.g。

In [54]: s = "parisa"

In [55]: [i for(i, v) in enumerate(s) if v == 'a']
Out[55]: [1, 5]

作为一项功能:

def findidx(string, char):
    return [i for(i, v) in enumerate(string) if v == char]

e.g。

In [56]: def findidx(string, char):
   ....:     return [i for(i, v) in enumerate(string) if v == char]
   ....: 

In [57]: findidx(s, "a")
Out[57]: [1, 5]

答案 5 :(得分:1)

您可以通过index包裹String(s)来捕获enumerate(),如下所示。

def str_lookup_reverse(s, c):
    index_list  = []
    for index, char in enumerate(s):
        if char == c:
            index_list.append(index)
            # print(index)
    return index_list


s           = "parisa"
index_list  = str_lookup_reverse(s, "a") 
print(index_list)        ## PRINTS: [1, 5]

答案 6 :(得分:0)

您也可以浏览这样的字符 -

def str_lookup_reverse(s, c):
    ind = 0
    for eachChar in s:
       ind += 1 
          if eachChar == c:
          print(ind)

s = "parisa" 
str_lookup_reverse(s, "a")