Python 正则表达式 findall 列表索引超出范围
Python regex findall list index out of range
import re
with open("day2.txt", "r") as file:
line=file.read().split("\n")
forward=0
pos=0
for i in range(0,len(line)-1):
a=line[i]
print(a)
if (re.findall('^f',a)[0]) == 'f':
forward=forward+int(((re.findall('\d',a)[0])))
if (re.findall('^u',a)[0]) == 'u':
pos=pos-int(((re.findall('\d',a)[0])))
if (re.findall('^d',a)[0]) == 'd':
pos=pos+int(((re.findall('\d',a)[0])))
print(forward*pos)
这里a或line[i]是一个字符串。 input.txt 文件中的测试用例就是这个,但是其中有几千行
forward 6
up 4
forward 8
down 6
forward 9
理想情况下,输出应该是6+8
的总和
当我 运行 它作为脚本时我得到一个错误我得到 列表索引超出范围 ,但是当我 运行 它通过 shell 逐行
确切的错误信息是:
Traceback (most recent call last):
File "day2.py", line 10, in <module>
if (re.findall('^u',a)[0]) == 'u':
IndexError: list index out of range
我哪里错了?
可以用 regex
来做,但在我看来,这将是过度设计的。由于您的文件由少量已知字符串和数字组成,因此您可以简单地根据字符串隔离数字。
这应该有效:
forward = 0
pos = 0
with open("input.txt", 'r') as file:
elements = file.read().split("\n")
for e in elements:
if "forward" in e:
forward += int(e[7:])
elif "up" in e:
pos -= int(e[2:])
elif "down" in e:
pos += int(e[4:])
print(forward*pos)
import re
with open("day2.txt", "r") as file:
line=file.read().split("\n")
forward=0
pos=0
for i in range(0,len(line)-1):
a=line[i]
print(a)
if (re.findall('^f',a)[0]) == 'f':
forward=forward+int(((re.findall('\d',a)[0])))
if (re.findall('^u',a)[0]) == 'u':
pos=pos-int(((re.findall('\d',a)[0])))
if (re.findall('^d',a)[0]) == 'd':
pos=pos+int(((re.findall('\d',a)[0])))
print(forward*pos)
这里a或line[i]是一个字符串。 input.txt 文件中的测试用例就是这个,但是其中有几千行
forward 6
up 4
forward 8
down 6
forward 9
理想情况下,输出应该是6+8
的总和
当我 运行 它作为脚本时我得到一个错误我得到 列表索引超出范围 ,但是当我 运行 它通过 shell 逐行
确切的错误信息是:
Traceback (most recent call last):
File "day2.py", line 10, in <module>
if (re.findall('^u',a)[0]) == 'u':
IndexError: list index out of range
我哪里错了?
可以用 regex
来做,但在我看来,这将是过度设计的。由于您的文件由少量已知字符串和数字组成,因此您可以简单地根据字符串隔离数字。
这应该有效:
forward = 0
pos = 0
with open("input.txt", 'r') as file:
elements = file.read().split("\n")
for e in elements:
if "forward" in e:
forward += int(e[7:])
elif "up" in e:
pos -= int(e[2:])
elif "down" in e:
pos += int(e[4:])
print(forward*pos)