【问题标题】:Python while loop string index out of rangePython while循环字符串索引超出范围
【发布时间】:2021-04-24 11:27:00
【问题描述】:

我在 Python 中循环一个字符串以在列表中附加“;”之间的单词(我知道还有其他方法可以在 Python 中循环字符串,但我希望它能够工作):

data = "ABC;AB;AB"
data_len = len(data)
items = []
separator = ";"

i = 0
while i < data_len:
    item = ''
    if i == 0:
        while data[i] != separator:
            item += data[i]
            i += 1
        items.append(item)
        continue
    i += 1
    while data[i] != separator and i < data_len:
        item += data[i]
        i += 1
                    
    items.append(item)

逻辑对我来说似乎是正确的,但不知何故解释器抛出了 Index out of range 异常:

while data[i] != separator and i

【问题讨论】:

  • 因为你增加 i 但之后仍然使用它会导致索引错误。检查您的格式,因为 python 缩进会影响逻辑。
  • 使用while i &lt; data_len and data[i] != separator: 而不是while data[i] != separator and i &lt; data_len:(即在使用前检查索引是否在范围内)。

标签: python loops while-loop indexoutofrangeexception


【解决方案1】:

已解决:

第二个内部while循环条件的顺序首先检查data[i],然后检查i &lt; len

解决办法是把第二个循环中的条件从:

while data[i] != separator and i < data_len:

到:

while i < data_len and data[i] != separator:

【讨论】:

    【解决方案2】:

    启动最后一个while循环只是一个小错误。 data[i] != separator and i &lt; data_len条件必须交换。

    data = "ABC;AB;AB"
    data_len = len(data)
    items = []
    separator = ";"
    
    i = 0
    while i < data_len:
        item = ''
        if i == 0:
            while data[i] != separator:
                item += data[i]
                i += 1
            items.append(item)
            #print(items)
            continue
        i += 1
        #print(i)
        while i < data_len and data[i] != separator:
            item += data[i]
            i += 1
                        
        items.append(item)
        #print(items)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2017-04-27
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多