Python: 字符串索引或范围在while循环中,而我试图将一个字符串覆盖到一个列表中。

问题描述 投票:0回答:2

我试图将一个由数字组成的字符串用连字符('-')隔开,转换成一个只包含数字的列表。例如:-如果一个字符串 str="10-2-517-92" 那么输出应该是 n=[10,2,517,92].到目前为止,我已经写了这段代码。

a="10-2-517-92"
n=[]
i=0
while(i<len(a)):
        m=0
        if(a[i]!="-"):
            while(a[i]!="-" and i<len(a)):
                m=m*10
                m=m+int(a[i])
                i+=1
            n.append(m)
            i=i+1
print(n)

我得到一个错误信息: string index out of range (在我使用的第二个循环中)

你能帮助我吗?

python string list while-loop stringindexoutofbounds
2个回答
0
投票

是否有什么限制条件,为什么你不直接使用 split 方法?

a="10-2-517-92"

arr_of_numbers = a.split('-')

# -> ['10', '2', '517', '92']

doc: https:/www.w3schools.compythonref_string_split.asphttps:/docs.python.org2librarystdtypes.html#str.split。


0
投票

你可以用str split方法代替。

n=a.split('-')

或者你可以使用regex split

import re

re.split(patern, a)


0
投票

错误发生在while循环,当 i=11. 这也是意料之中的,因为你的最大指数是你的 a 变量只 10.

你的代码是正确的,除了你只需要改变从这个

while(a[i]!="-" and i<len(a)):

以此来正确使用 逻辑运算符

while(i<len(a) and a[i]!="-"):

这样,你将使用逻辑的 and 操作符,也就是说,如果第一个条件是假的,那么第二个条件将不会被运行。因此,当索引元素大于长度时,这将阻止检查索引元素。

这将输出

[10, 2, 517, 92]

0
投票

其他答案并不能解决你的问题 "为什么会出现索引错误"。

原因是你检查 a[i] != "-" 前检查 i < len(a)所以当你到达终点时,你会在你看到它是否安全之前爆炸。

如果你改变顺序,你就会得到正确的结果。[10, 2, 517, 92].

话虽如此。

  • 你应该使用split,除非这是一个家庭作业。
  • 你不需要把每一个char都逐一转换为int。int('517') 如果你想按字符串分组,而不是使用 *10 的东西。
© www.soinside.com 2019 - 2024. All rights reserved.