提问人:archerwell32 提问时间:11/27/2022 最后编辑:archerwell32 更新时间:11/27/2022 访问量:111
从字符串中提取 2 位数字
Extracting 2 digits numbers from string
问:
我有一个包含字符串的文件,从我需要将每个字符串附加到我的列表中,每 2 位数字。文件内容如下: https://pastebin.com/N6gHRaVA
我需要遍历每个字符串并检查 index[i] 和 index[i+1] 上的字符串是否为数字,如果是,则附加这些数字以列出并从这 2 位数字中切分字符串,
例如,字符串:
string = '7469NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO' 应该以这种方式工作:
- 好的,我找到了数字 74,将 74 添加到我的列表中,然后将字符串从 74 切到末尾
- 我的字符串现在是 69NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO,我找到了数字 69,添加 69 以列出并切片字符串,直到我找到新的 2 位数字。 问题是我总是有错误:
if string[i].isdigit() and string[i+1].isdigit():
~~~~~~^^^^^
IndexError: string index out of range
f = open("file.txt")
read = f.read().split()
f.close()
for string in read:
l = list()
i = 0
print(string)
while i<len(string):
if string[i].isdigit() and string[i+1].isdigit():
l.append(string[i] + string[i+1])
string = string[i+2:]
i = 0
else:
i+=1
我的程序在第 31 行的字符串处停止,这是字符串: “REDOHGMDPOXKFMHUDDOMLDYFAFYDLMODDUHMFKXOPDMGHODER5”
我不知道如何进行这个切片迭代,请不要使用正则表达式。
答:
你的循环条件 i len(string)。如果 string 不为空,则等于正 intiger,其计算结果为 True。因此,您创建了一个无限循环,当 i 大于字符串长度时,它达到了它的结尾。试试这个:
while i < len(string) -1:
编辑:
显然,我没有注意到哪个字符串给了你错误。当您检查字符串的 i+1 元素时,当我们为最后一个字符加星标时,伸手去拿下一个字符会产生明显的错误。因此,条件中应该有 -1。
你要离开了绳子的尽头......改变:
while i<len(string):
自:
while i<len(string)-1:
你应该没事的。
如果您一次只看一个字符,则可以使用原始 .这里的诀窍是,你总是在看一个字符,而且在字符的“前面”。因此,您必须将检查缩短一次迭代,以防止超过要检查的最后一个字符。while
您可以使用递归。 这是处理其中一个字符串的样子。
部分代码:
my_string = '7469NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO'
result_list = []
def read_string(s):
result = ""
for i,j in enumerate(s):
if i>0 and s[i-1].isdigit() and s[i].isdigit():
result = s[i-1] + s[i]
result_list.append(result)
read_string(s[i+1:])
break;
return (result_list)
# Call the read_string function
x = read_string(my_string)
print(x)
输出:
['74', '69', '83', '84']
你没有停在正确的位置。你可以把你的while循环改成
while I < len(string) - 1:
如果我可以建议一种稍微干净的方法,请参见下文。
f = open("file.txt")
read = f.read().split()
f.close()
for string in read:
l = list()
i = 0
print(string)
while i < len(string) - 1:
numCheck = i + 1 # You call it more than once. Set to var
ltr = string[i] + string[numCheck] # no need to call this multiple times, just set to a var
if ltr.isdigit():
l.append(ltr)
string = string[numCheck:]
i = 0
else:
i += 1
print(l)
我把你的while循环改为上面,然后把你多次进行的调用放到一个变量中。此外,由于您的列表是在 for 循环中初始化的,因此如果您想要一个包含所有数字的列表,您只需保留最后一个字符串中的数字,只需将其移出即可。这样
f = open("file.txt")
read = f.read().split()
f.close()
l = list()
for string in read:
i = 0
print(string)
while i < len(string) - 1:
numCheck = i + 1 # You call it more than once. Set to var
ltr = string[i] + string[numCheck] # no need to call this multiple times, just set to a var
if ltr.isdigit():
l.append(ltr)
string = string[numCheck:]
i = 0
else:
i += 1
print(l)
评论