我试图将一个由数字组成的字符串用连字符('-')隔开,转换成一个只包含数字的列表。例如:-如果一个字符串 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 (在我使用的第二个循环中)
你能帮助我吗?
是否有什么限制条件,为什么你不直接使用 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。
你可以用str split方法代替。
n=a.split('-')
或者你可以使用regex split
import re
re.split(patern, a)
错误发生在while循环,当 i=11
. 这也是意料之中的,因为你的最大指数是你的 a
变量只 10
.
你的代码是正确的,除了你只需要改变从这个
while(a[i]!="-" and i<len(a)):
以此来正确使用 逻辑运算符
while(i<len(a) and a[i]!="-"):
这样,你将使用逻辑的 and
操作符,也就是说,如果第一个条件是假的,那么第二个条件将不会被运行。因此,当索引元素大于长度时,这将阻止检查索引元素。
这将输出
[10, 2, 517, 92]
其他答案并不能解决你的问题 "为什么会出现索引错误"。
原因是你检查 a[i] != "-"
前检查 i < len(a)
所以当你到达终点时,你会在你看到它是否安全之前爆炸。
如果你改变顺序,你就会得到正确的结果。[10, 2, 517, 92]
.
话虽如此。
int('517')
如果你想按字符串分组,而不是使用 *10
的东西。