我试图计算列表中存在多少个特定字符串(在这种情况下' v')。 但是当我运行代码时,它会给我索引超出范围的错误。 该列表由line.split()方法
创建所以这就是我所拥有的:
for line in open('cube.obj','r').readlines():
rawdata = line.split()[0:]
data = line.split()[1:]
obj.add_last(data)
if rawdata[0] == 'v':
v_count += 1
cube.obj文件如下:
# cube
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 0.0 0.0 1.0
v 0.0 1.0 1.0
v 0.0 1.0 0.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0
f 1 2 3 4
f 6 7 8 5
f 2 3 8 7
f 1 4 5 6
f 3 4 5 8
f 1 2 7 6
感谢任何帮助 谢谢!
答案 0 :(得分:1)
如果您的索引超出范围错误,那是因为您正在引用不存在的列表条目。
在您的情况下,看起来可能是rawdata[0] == 'v'
如果rawdata是一个空列表,这将导致错误。如果你的行是一个空字符串,就会发生这种情况。
line = ''
rawdata=line.split()[0:]
rawdata
> []
rawdata[0]
> ---------------------------------------------------------------------------
> IndexError Traceback (most recent call last)
> <ipython-input-4-c81248904650> in <module>()
> ----> 1 rawdata[0]
> IndexError: list index out of range
要跳过此操作,请测试该行是否为空,如果是continue
,则为下一行。
for line in ['', '', 'a', 'b']:
if not line:
continue
rawdata = line.split()[0:]
print rawdata[0]
> a
> b
答案 1 :(得分:1)
您可以sum
使用生成器表达式使用if line.strip()
删除空行,以便我们不会将IndexError
索引为空列表:
def counts(f,ch):
with open(f) as in_file:
return sum(line.split()[0] == ch for line in in_file if line.strip())
print(counts("words.txt","v"))
8
if line.strip()
只有在该行不为空时才为True。