0

我正在尝试将由连字符 ('-') 分隔的数字组成的字符串转换为仅包含数字的列表。例如:- 如果一个字符串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)

我收到一条错误消息:字符串索引超出范围(在我使用的第二个 while 循环中)

你能帮帮我吗?

4

4 回答 4

0

为什么您不只使用该split方法有任何限制吗?

a="10-2-517-92"

arr_of_numbers = a.split('-')

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

文档
https ://www.w3schools.com/python/ref_string_split.asp https://docs.python.org/2/library/stdtypes.html#str.split

于 2020-04-23T07:18:38.663 回答
0

您可以改用 str split 方法。

n=a.split('-')

或者您可以使用正则表达式拆分

import re

re.split(patern, a)

于 2020-04-23T07:18:59.763 回答
0

其他答案没有解决您的问题“为什么会出现索引错误”。

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

如果您切换顺序,您会得到正确的结果[10, 2, 517, 92]

话虽如此:

  • 除非这是家庭作业,否则您应该使用拆分。
  • 您不需要将每个 char 一个一个地转换为 int ,int('517')如果您想按字符串分组而不是做这些*10事情,也可以使用。
于 2020-04-23T07:26:00.217 回答
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]
于 2020-04-23T07:24:04.777 回答