Python 2.7.5 列表解析各层循环变量传递问题
我有3个html文件路径的列表,例如:htmls=["1.html","2.html","3.html",]现在我要用列表解析的方式逐文件逐行地把行数据集中在列表res中...
我有3个html文件路径的列表,
例如:htmls=["1.html","2.html","3.html",]
现在我要用列表解析的方式逐文件逐行地把行数据集中在列表res中:
res=[eachline for eachline in open(eachhtml) for eachhtml in htmls]
结果里层for循环的open(eachhtml)无法读取外层for循环的eachhtml,报错:
Traceback (most recent call last):
File "C:\Users\Administrator.PC-20120204YYJR\Desktop\studio\python\pyfiles\battleAnalyze_lisCom.py", line 187, in <module>
rawl=[eachline for eachline in open(eachhtml) for eachhtml in htmls]
NameError: name 'eachhtml' is not defined
奇怪的是,实际上在这种列表解析完成后,已经在全局作用域注册了i,j,下例可以证明:
>>> [(i,j) for j in range(2) for i in range(3)]
[(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]
>>> i,j
(2, 1)
我不想用那么多次append函数啊...有办法解决这个问题吗?我就是要用列表解析一行写完整个过程啊啊啊
我是单人开发啊,程序可读性是浮云啊,我要性能啊啊啊 展开
例如:htmls=["1.html","2.html","3.html",]
现在我要用列表解析的方式逐文件逐行地把行数据集中在列表res中:
res=[eachline for eachline in open(eachhtml) for eachhtml in htmls]
结果里层for循环的open(eachhtml)无法读取外层for循环的eachhtml,报错:
Traceback (most recent call last):
File "C:\Users\Administrator.PC-20120204YYJR\Desktop\studio\python\pyfiles\battleAnalyze_lisCom.py", line 187, in <module>
rawl=[eachline for eachline in open(eachhtml) for eachhtml in htmls]
NameError: name 'eachhtml' is not defined
奇怪的是,实际上在这种列表解析完成后,已经在全局作用域注册了i,j,下例可以证明:
>>> [(i,j) for j in range(2) for i in range(3)]
[(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]
>>> i,j
(2, 1)
我不想用那么多次append函数啊...有办法解决这个问题吗?我就是要用列表解析一行写完整个过程啊啊啊
我是单人开发啊,程序可读性是浮云啊,我要性能啊啊啊 展开
3个回答
展开全部
只有一次append啊。如果要性能用blist,循环语句本身不是性能的瓶颈,第一是文件IO,第二是append。 如果用blist可以减少append的性能损失。文件IO,可以一次性readlines,速度会快很多。
from blist import blist
blines=blist()
for eachhtml in htmls:
tmplines=open(eachhtml).readlines()
for eachline in tmplines:
blines.append(eachline
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我用你的代码测了下, 没有问题。
但是我觉得,既然使用python, 就不要在 一些小地方 节约性能了。
也许你以后还有维护这段代码呢。可读性不是浮云哦
但是我觉得,既然使用python, 就不要在 一些小地方 节约性能了。
也许你以后还有维护这段代码呢。可读性不是浮云哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
搞反了,左边的相当于是外层循环
res=[eachline for eachhtml in htmls for eachline in open(eachhtml) ]
res=[eachline for eachhtml in htmls for eachline in open(eachhtml) ]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询