你能帮我解决这行python代码吗?我正在尝试向数组添加字符串,并排除换行符。虽然代码在第一次分割字符串时似乎工作,但它似乎认为那里有另一个新行,因为它返回错误消息:substring not found
。但是,当我打印出cut的值时,它返回kdfjsalsdjf
,显示新行代码已被删除
x='lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
for i in x:
if i=='\n':
cut=x.index(i)
x=x[cut+2:]
Traceback (most recent call last):
File "<pyshell#5>", line 3, in <module>
cut=x.index(i)
ValueError: substring not found
答案 0 :(得分:3)
为什么不使用&#34;替换&#34;命令?
x.replace("\n","")
答案 1 :(得分:1)
您的问题源于这样一个事实:您迭代的x
没有看到您所做的更改。
有点像这样:
x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
y = x
for i in x:
if i=='\n':
cut = y.index(i)
y = y[cut+2:]
这是因为str.__iter__
的工作方式,因此,您在for循环中对x
所做的更改不会反映在for循环的未来迭代中。
您可以使用while循环修复此问题:
i = 0
while < len(x):
if x[i] == '\n':
x = x[i+2 :]
i = -1
i += 1
这有点令人费解,因为您似乎想要找到'\n'
的最后一个匹配项,并在其后面取任何2个字符。所以你可以这样做:
x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
inds = []
for i,char in enumerate(x):
if char=='\n':
inds.append(i)
if not inds: # '\n' was nowhere in the string
x = x # we don't have to make any changes
else:
max_ind = max(inds)
x = x[max_ind+2 :]
现在,让我们缩短一下:
x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
inds = [i for i,char in enumerate(x) if char=='\n']
max_ind = max(inds)+2 if inds else -2
x = x[max_ind :]
或者:
x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
try:
max_ind = x.rindex('\n')
x = x[max_ind+2 :]
except ValueError:
pass