【问题标题】:Why index is showing wrong in Python list为什么索引在 Python 列表中显示错误
【发布时间】:2021-07-04 11:15:46
【问题描述】:

我正在编写一个程序来找出字符串 =“Hello World”中给定值 'o' 的索引号。我使用了三种方式,第一种是使用 index(),第二种是使用带有计数器变量的 for 循环,第三种是使用带有 enumerate() 函数的 for 循环。

我对计数器变量有疑问。因此,“Hello World”中有两个“o”,第一个在第 4 个索引处,第二个在第 7 个索引处。但我的计数器变量显示我 4 和 6 作为输出。但是 enumerate() 显示我 4 和 7 作为输出。我想知道我的计数器变量出了什么问题。

提前致谢。

这是我的代码

val = 'Hello World'
counter = 0
print("Index of 'o' Using Index Function: ", val.index('o', 5))
print('---------------------------------------')

for i in val:
    if i == 'o':
        print(i, counter)
              #I don't want to use break here because I want to print all the index of 'o'
    else:
        counter += 1
print("------------------")

for i, var in enumerate(val):
    print(i, var)

这是输出

Index of 'o' Using Index Function:  7
---------------------------------------
o 4
o 6
------------------
0 H
1 e
2 l
3 l
4 o
5  
6 W
7 o
8 r
9 l
10 d

【问题讨论】:

  • 无论匹配如何,都应该增加counter
  • 请你解释一下,其实我是初学者。
  • 只有在i != "o"else 部分中,您才在做counter += 1;但是counter不管它是否命中"o"都必须上升,对吧?
  • @KapilYadav 删除 else 块并让计数器留在循环中
  • 尝试更改val = "ooooooooooo" 并运行您的代码,看看counter 有什么。

标签: python python-3.x for-loop


【解决方案1】:

即使找到o,您也需要更新计数器变量。

if i == 'o':
    print(i, counter)
counter += 1

【讨论】:

  • 我认为您删除了之前的帖子,因为它在我的屏幕上显示给我。请使用编辑按钮而不是删除。欢迎使用 StackOverflow
【解决方案2】:

似乎计数逻辑中的错误。第一个 'o' 不计为计数器增量放置在 else 块上。试试这个,

for i in val:
    if i == 'o':
        print(i, counter)
    counter += 1
print("------------------")

【讨论】:

    【解决方案3】:
    val = 'Hello World' 
    counter = 0
    print("Index of 'o' Using Index Function: ", val.index('o', 5))
    
    print('---------------------------------------')
    
    for i in val: 
        if i == 'o': 
            print(i, counter)
        counter += 1     
    
    print("------------------")
    
    for i, var in enumerate(val):
        print(i, var)
    

    【讨论】:

      【解决方案4】:

      我建议你使用我写的这段代码

      def count(string, letter):
          assert letter in string, f"The letter {letter!r} is not in the string {string!r}"
          return [i for i, j in enumerate(string) if j == letter]
          
      
      print(count('Hello World', "o"))
      

      它会根据需要打印出[4, 7]

      它被称为列表理解,它逐个字符地进行,如果字符等于letter,则将其添加到列表中。 等于:

      counter = []
      for i, j in enumerate(string):
          if j == letter:
              counter.append(i)
      

      【讨论】:

      • OP 不确定他们自己的代码发生了什么,我认为不会向他们抛出另一段无法解释的代码(带有他们以前可能没有看到的构造)很有帮助
      • [i for i,j in enumerate(string) if j==letter]。使用这个
      • @Sujay ?,这正是我所做的
      • 我告诉我把它缩短到 1 行
      • 啊,好吧,我其实正要这样做
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2017-07-24
      • 2014-04-10
      • 1970-01-01
      相关资源
      最近更新 更多