【问题标题】:How to fix the error "index out of range"如何修复错误“索引超出范围”
【发布时间】:2019-04-20 11:57:44
【问题描述】:

我必须用字符串中的一些“”来分割字符串 我是python初学者,请帮我QQ 由于line3显示“索引超出范围”的问题

窗口

data = input().split(',')
for i in range(len(data)):
    for j in range(len(data[i])):
        if data[i][j] == '"':
            data[i] += "," + data[i + 1]
            data.pop(i + 1)
            if data[i + 1][j] == '"':
                data[i] += "," + data[i + 1]
                data.pop(i + 1)

    print(data[i])

样本输入:

'str10, "str12, str13", str14, "str888,999", str56, ",123,", 5'

样本输出:

str10
"str12, str13"
str14
"str888,999"
str56
",123,"
5

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    如果您访问其数据后面的列表/字符串,则会发生错误。您正在删除东西并访问

    for i in range(len(data)):
         ...
         data[i] += "," + data[i + 1]
    

    如果i 的范围从0len(data)-1,并且您访问了data[i+1],那么您在上一个i 的数据之外!


    永远不要修改你迭代的东西,这会导致灾难。自己拆分字符串,通过逐个字符迭代它并记住您当前是否在 " ... " 内:

    data = 'str10, "str12, str13", str14, "str888,999", str56, ",123,", 5' 
    
    inside = False
    result = [[]]
    for c in data:
        if c == ',' and not inside:
            result[-1] = ''.join(result[-1]) # add .strip() to get rid of spaces on begin/end
            result.append([])
        else:
            if c == '"':
                inside = not inside
            result[-1].append(c)
    
    result[-1] = ''.join(result[-1]) # add .strip() to get rid of spaces on begin/end
    print(result) 
    print(*result, sep = "\n")
    

    输出:

    ['str10', ' "str12, str13"', ' str14', ' "str888,999"', ' str56', ' ",123,"', ' 5']
    
    str10
     "str12, str13"
     str14
     "str888,999"
     str56
     ",123,"
     5
    

    .strip() 添加到连接行以消除前导/尾随空格:

    result[-1] = ''.join(result[-1]).strip()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多