用于在字符串中查找索引的循环

时间:2017-03-31 16:20:42

标签: python string loops for-loop

我想知道为什么我的函数不会调用字符串中字符的索引。我为此使用了for循环,由于某种原因,它只是列出了字符串的所有可能索引。我做了一个特定的if语句,但我不明白为什么它不遵循指示。

def where_is(char,string):
  c=0
  for char in string:
    if char==(string[c]):
      print (c)
      c+=1
    else:
      print ("")
where_is('p','apple')

4 个答案:

答案 0 :(得分:1)

您的循环正在覆盖您的参数char。一旦进入循环,它就会被字符串中的字符覆盖,然后您将其与自身进行比较。重命名参数或循环变量。此外,您的计数器增量c+=1也应该在if之外。无论您是否找到匹配项,都希望增加索引,否则您的结果将会关闭。

就风格问题而言,你真的不需要else阻止,print调用只会给你额外的换行符,你可能不需要。

答案 1 :(得分:0)

问题是给定的代码迭代了存储在字符串中的所有内容,并且每次“c”的值增加并打印时它都匹配。 我认为你的代码应该是:

def where_is(char, string):
    for i in range(len(string)):
        if char == (string[i]):
            print(i)

where_is('p', 'apple')

这将打印'apple'中所有'p'的索引。

答案 2 :(得分:0)

首先,你使用的索引在else部分没有增加,其次,在迭代字符串时,我通常更喜欢while循环到for循环。稍微修改一下代码,看看这个:

def where_is(char,string):
  i=0
  while i<len(string):
    if char==(string[i]):
      print (i)
    else:
      print ("")
    i+=1
where_is('p','apple')

输入:where_is('p','apple')

输出:1 2

Check it out here

答案 3 :(得分:0)

正如评论中所提到的,你在for循环中没有正确增加。你想循环遍历单词,每次递增并在找到字母时输出索引:

def where_is(char, word):
    current_index = 0
    while current_index < len(word):
        if char == word[current_index]:
            print (current_index)
        current_index += 1

where_is('p', 'apple')

返回:

1
2

或者,通过使用enumerate和列表理解,您可以将整个内容减少到:

def where_is(char, word):
    print [index for index, letter in enumerate(word) if letter == char]

where_is('p', 'apple')

将打印:

[1,2]

然后,您还可以选择return - 创建您创建的列表,以便进一步处理。